2

これは非常に基本的なことだと確信していますが、内部で ../model を使用することはできません{{#if_eq}}。../../model を使用してみましたが、これは model._revs_info の子を指しています。

  {{#each model._revs_info}} 
        {{debug ../model}}
        {{#if_eq status compare="available"}} 
            {{debug ../model}}
            <a href="#list/{{model.id}}/{{rev}}">{{rev}}</a>
         {{/if_eq}}                                      
  {{/each}}         

{{#if_eq}}https://github.com/danharper/Handlebars-Helpers/blob/master/helpers.jsからコピーされました

/**
 * If Equals
 * if_eq this compare=that
 */
Handlebars.registerHelper('if_eq', function(context, options) {
    if (context == options.hash.compare)
        return options.fn(this);
    return options.inverse(this);
});

{{debug}}http://thinkvitamin.com/code/handlebars-js-part-3-tips-and-tricks/からコピーされました

Handlebars.registerHelper("debug", function(optionalValue) {
  console.log("Current Context");
  console.log("====================");
  console.log(this);

  if (optionalValue) {
    console.log("Value");
    console.log("====================");
    console.log(optionalValue);
  }
});
4

1 に答える 1

5

パスに関するハンドルバーのドキュメントによると、

../ パス セグメントは、コンテキストの 1 レベル上ではなく、親テンプレート スコープを参照します。これは、ブロック ヘルパーが任意のコンテキストでブロックを呼び出すことができるため、親テンプレート スコープへの参照を除いて、「1 レベル上」の概念は特に意味がないためです。

各ブロック ヘルパーはスコープを定義するため、if_eq では階層は次のようになります。

  1. ベーステンプレート、
  2. 各スコープ、
  3. if_eq スコープ。

祖父母を../../model指すと、正しいコンテキストが得られます。

そして、コードに基づくフィドルhttp://jsfiddle.net/aFGD6/デバッグがアクティブな別のフィドルhttp://jsfiddle.net/aFGD6/1/

于 2012-07-21T11:24:31.813 に答える