2012-03-13 144 views
15

我想为Handlebars.js写一个条件语句帮助器。从本质上讲,如果它是Apply Now页面,我想在链接上放置一个“活动”类。Handlebars.js有条件的“if语句”助手

助手:

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/

回答

20

我看到一个小的语法错误,我相信可能是问题。如果你打算使用一个带有块的助手,那么你必须用助手名称来关闭它。怎么看我已经更换了你{{/if}}{{/isApplyNow}},就像这样:

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

Ahh duh,当我回到应用程序的这一边时,我会稍微尝试一下。谢谢! – wart 2012-03-14 18:19:19

+0

就是这样!感谢kaptron。 – wart 2012-03-19 20:16:03

1

注:助手 块(这)将不再工作。相反,使用block.fn(this)

例如,

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