web-dev-qa-db-ja.com

Handlebars.jsの条件付き「ifステートメント」ヘルパー

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/

16
wart

問題になる可能性があると思われる小さな構文ミスが1つあります。ブロックを取るヘルパーを使用する場合は、ヘルパー名でそれを閉じる必要があります。次のように、{{/if}}{{/isApplyNow}}に置き換えた方法をご覧ください。

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

注:ヘルパーのblock(this)は機能しなくなります。代わりに、block.fn(this)を使用してください

例えば.

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