2012-07-19 31 views
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

根據Handlebars documentation on paths複製,

../路徑段引用父模板作用域,而不是上下文中的一個 級別。這是因爲塊幫助程序可以在任何上下文中調用 塊,所以「一級上」的概念不是 特別有意義,除了對父範本 作用域的引用。

每個塊助手定義了一個範圍,所以在if_eq層次結構看起來像

  1. 基本模板,
  2. 每個範圍,
  3. if_eq範圍。

指向祖父母,../../model,你會得到正確的上下文。

基於你的代碼的小提琴http://jsfiddle.net/aFGD6/另一個帶調試活動的,http://jsfiddle.net/aFGD6/1/