你会如何改变下面的代码来使它工作?问题是这== '一些信息' 的表达:Handlebars.js if block helper ==
<ul>
{{#each errors}}
{{#if (this == 'some message') }}
<li>Status</li>
{{else}}
<li>{{this}}</li>
{{/if}}
{{/each}}
</ul>
你会如何改变下面的代码来使它工作?问题是这== '一些信息' 的表达:Handlebars.js if block helper ==
<ul>
{{#each errors}}
{{#if (this == 'some message') }}
<li>Status</li>
{{else}}
<li>{{this}}</li>
{{/if}}
{{/each}}
</ul>
最简单的事情将是添加自定义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}}
老问题,但如果你使用Elving的Swag Handlebars helpers library,你可以使用助手is
和isnt
。
绝对惊人! – 2015-11-02 22:58:45
这个库非常有用! – caballerog 2016-04-20 08:36:42
这也可以通过使用把手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);
对于可重用性来说,将helper命名为is_equal或更好的方法会更有意义,没有意义将其直接绑定到状态。 – 2016-02-11 16:49:36
如果'{{#if_eq这个 “一些信息”}}'的作品,为什么不'这一点。 someProperty'?无法让它工作。 – raffian 2013-12-29 05:06:10
@raffian:你有没有一个例子(可能是对答案中的一个小窍门的修改)你想要做什么? – 2013-12-29 05:07:49
..正在建造一个小提琴,然后注意到我的自定义帮手以'{{/ if}}'结束,而不是'{{/ if_eq}}',令人难以置信,浪费了几个小时,但谢谢你打开我的眼睛: - ) – raffian 2013-12-29 05:48:18