传递处理程序后手柄上下文丢失

时间:2012-07-19 14:05:14

标签: javascript handlebars.js

我确信这是非常基本的,但我无法在{{#if_eq}}内使用../model。我甚至尝试使用../../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);
  }
});

1 个答案:

答案 0 :(得分:4)

根据Handlebars documentation on paths

  

../路径段引用父模板范围,而不是一个   在上下文中升级。这是因为块助手可以调用a   阻止任何上下文,所以“一级”的概念不是   除了作为对父模板的引用之外,特别有意义   范围。

每个块助手都定义了一个范围,因此if_eq中的层次结构看起来像

  1. 基本模板,
  2. 每个范围,
  3. if_eq范围。
  4. 指向祖父母../../model并获得正确的背景。

    基于您的代码的小提琴http://jsfiddle.net/aFGD6/另一个有调试活动的小提琴,http://jsfiddle.net/aFGD6/1/