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
私がこれを不適切に書いているかどうか誰かが見ることができますか?
ありがとう!
参考記事:
ハンドルバーテンプレートのIfブロック内でヘルパーを呼び出す
http://thinkvitamin.com/code/handlebars-js-part-2-partials-and-helpers/
問題になる可能性があると思われる小さな構文ミスが1つあります。ブロックを取るヘルパーを使用する場合は、ヘルパー名でそれを閉じる必要があります。次のように、{{/if}}
を{{/isApplyNow}}
に置き換えた方法をご覧ください。
{{#isApplyNow}}
<a href="{{url}}" class ='active'>{{this.title}}</a>
{{else}}
<a href="{{url}}">{{this.title}}</a>
{{/isApplyNow}}
注:ヘルパーのblock(this)は機能しなくなります。代わりに、block.fn(this)を使用してください
例えば.
Handlebars.registerHelper('isApplyNow', function(block) {
if (this.title === "Apply Now")
return block.fn(this);
else
return block.inverse(this);
});