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/