簡體   English   中英

訪問Handlebar.js模板中的根上下文

[英]Access to root context in Handlebar.js template

是否有任何內置方法可以訪問Handlebars.js模板中的根上下文? 大多數助手都添加了一個嵌套的上下文,你必須在該上下文中的變量之前編寫../來訪問它,但如果你有很多的每個,ifs等,那就不太實用了。

使用@root。 這是在handlebars-v2.0.0.js中

{{@root.somthing.nested_somthing}}

一旦用循環(例如每個) 更多信息更改上下文,就不可能訪問模板的根上下文

但是,有可能通過'../'訪問先前的上下文

# app/assets/javascript/contents.coffee
body = HandlebarsTemplates['my_hbs_template']({
  view:{
    registryName: 'foo',
    data: {items: {x: 'x'}}
    }
  })

模板:

<!-- app/assets/javascript/templates/my_content.hbs -->
<table class="table">
  <tbody>

  {{#each view.data.items}}
    <tr>
      <td>{{@key}}</td>
      <td>
        Hello from {{../view.registryName}}
      </td>
    </tr>
  {{/each}}
  </tbody>
</table>

查看http://handlebarsjs.com/#paths了解更多信息

是的,我創建了一個請參閱http://www.my2ndgeneration.com/TemplateLanguageDoc.aspx#xroot

基本上,添加此幫助器和賓果游戲{{xRoot}}將帶您到頂部...

我總是把我的JSON數據傳遞到這樣的把手:

{ data: self.data } 

因此,當下面的代碼看到xRoot標記並將我帶到頂部時,它總是返回“數據”

Handlebars.JavaScriptCompiler.prototype.nameLookup = function (parent, name, type) {

    if (name.indexOf("xRoot") === 0) {
        return "data";
    }

    if (/^[0-9]+$/.test(name)) {
        return parent + "[" + name + "]";
    } else if (Handlebars.JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
        return parent + "." + name;
    }
    else {
        return parent + "['" + name + "']";
    }
};

還沒有!

有人建議過幾次並且有一張門票: https//github.com/wycats/handlebars.js/issues/392

他們的論點是它不是必需的,但如果它是一個廉價的修復,沒有明顯的性能開銷,我不明白為什么它不能被包括在內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM