Handlebars.js, если хелпер блока ==
Как бы вы изменили следующий код, чтобы заставить его работать? Проблема в том, что это выражение 'some message':
<ul>
{{#each errors}}
{{#if (this == 'some message') }}
<li>Status</li>
{{else}}
<li>{{this}}</li>
{{/if}}
{{/each}}
</ul>
Ответы
Ответ 1
Проще всего добавить пользовательский помощник if_eq
:
Handlebars.registerHelper('if_eq', function(a, b, opts) {
if(a == b) // Or === depending on your needs
return opts.fn(this);
else
return opts.inverse(this);
});
а затем настройте свой шаблон:
{{#if_eq this "some message"}}
...
{{else}}
...
{{/if_eq}}
Демо: http://jsfiddle.net/ambiguous/d4adQ/
Если ваши записи errors
не были простыми строками, вы можете добавить к ним флаги "это некоторые сообщения" и использовать стандартный {{#if}}
(обратите внимание, что добавление свойства непосредственно в строку не будет работать так хорошо ):
for(var i = 0; i < errors.length; ++i)
errors[i] = { msg: errors[i], is_status: errors[i] === 'some message' };
и
{{#if is_status}}
<li>Status</li>
{{else}}
<li>{{msg}}</li>
{{/if}}
Демо: http://jsfiddle.net/ambiguous/9sFm7/
Ответ 2
Старый вопрос, но если вы используете Elvers библиотеку помощников ручек Swag Handlebars, вы можете использовать помощники is
и isnt
.
Ответ 3
Это также может быть достигнуто с помощью Handlebars Subexpressions.
Шаблон -
<script id="tmplStatus" type="text/x-handlebars">
<ul>
{{#each errors}}
{{#if (is_status this 'some message')}}
<li>Status</li>
{{else}}
<li>{{this}}</li>
{{/if}}
{{/each}}
</ul>
</script>
Javascript -
var errors = [
'Where is pancakes house?',
'some message',
'One cent stamp'
];
Handlebars.registerHelper('is_status', function(msg, matchMsg, options)
{
if(msg === matchMsg)
return true;
else
return false;
});
var tmplStatus = Handlebars.compile($('#tmplStatus').html()),
domStatus = tmplStatus({ errors: errors });
$('body').append(domStatus);
Рабочая демонстрация: http://jsfiddle.net/techgeeek/b99qwtpw/