2012-03-13 22 views
15

Handlebars.jsのif文の条件付きヘルパーを記述しようとしています。基本的には、もし私が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

私は、私が問題になる可能性が信じている1つのマイナーな構文のミスを参照ください。ブロックを取るヘルパーを使用する場合、ヘルパー名でヘルパーを閉じる必要があります。

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

ああ、私がアプリのその側に戻ったときにちょっと試してみます。ありがとう! – wart

+0

それはそれです!ありがとうkaptron。 – wart

1

注: ブロック(この)ヘルパーではもはや機能しませんので、同じように、私は{{/isApplyNow}}であなたの{{/if}}を交換してきた方法を参照してください。代わりに、block.fn(this)を使用してください。

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