Handlebars.js如果块助手==
你将如何改变下面的代码,使其工作? 问题是这个=='一些消息'expression式:
<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
条目不是简单的string,那么你可以添加“这是一些消息”标志给他们,并使用标准{{#if}}
(注意直接添加一个属性到一个string将无法正常工作):
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/
老问题,但如果你使用Elving的Swag Handlebars助手库 ,你可以使用助手is
和isnt。
这也可以通过使用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/