2012-03-13 93 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); 
});