有条件的" if statement" Handlebars.js的助手

时间:2012-03-13 15:31:21

标签: handlebars.js

我正在尝试为Handlebars.js编写一个条件if语句帮助器。从本质上讲,我想把一个"活跃的"如果是Apply Now页面,则链接上的类。

助手:

  Handlebars.registerHelper('isApplyNow', function(block) {
    if(this.title == "Apply Now") {
      return block(this);
    } else {
      return block.inverse(this);
    }
  });

和模板:

  <ul>
    {{#each pages}}
      <li>
        {{#isApplyNow}}
          <a href="{{url}}" class ='active'>{{this.title}}</a>
        {{else}}
          <a href="{{url}}">{{this.title}}</a>
        {{/if}}
      </li>
    {{/each}}  
  </ul>

但是,我收到了一个非常简单的javascript错误:

Uncaught [object Object] in handlebars-1.0.0.beta.2.js:595

任何人都可以看到我写这个不正确吗?

谢谢!

参考文章:

Calling Helper Within If Block in Handlebars Template

http://thinkvitamin.com/code/handlebars-js-part-2-partials-and-helpers/

2 个答案:

答案 0 :(得分:20)

我确实看到一个轻微的语法错误,我认为这可能是个问题。如果您打算使用一个带有块的帮助器,那么您必须使用帮助器名称将其关闭。了解我如何将{{/if}}替换为{{/isApplyNow}},如下所示:

    {{#isApplyNow}}
      <a href="{{url}}" class ='active'>{{this.title}}</a>
    {{else}}
      <a href="{{url}}">{{this.title}}</a>
    {{/isApplyNow}}

答案 1 :(得分:1)

注意: 帮助器中的块(this)将不再起作用。相反,使用block.fn(this)

e.g。

 Handlebars.registerHelper('isApplyNow', function(block) {
    if (this.title === "Apply Now") 
      return block.fn(this);
    else 
      return block.inverse(this);
 });