2013-06-28 9 views
23

Handlebars.jsテンプレートのルートコンテキストにアクセスするための組み込みメソッドはありますか? ヘルパーのほとんどはネストされたコンテキストを追加しています。そのコンテキストの変数の前に../を書く必要がありますが、それぞれのコンテキストやifsなどがたくさんある場合はあまり実用的ではありません。Handlebar.jsテンプレートのルートコンテキストへのアクセス

答えて

42

使用@rootため

<!-- 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:各)more info

しかし'../'

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

テンプレートを使用して、以前のコンテキストにアクセスする可能性があります。これはhandlebars-v2.0.0.jsにあります。

{{@root.somthing.nested_somthing}} 
+1

@rootを 'if'ブロックと' each'ブロックで使用することもできます。 '{{#each @ root.somthing.nested_somthing}}' – user393274

+0

バージョンが導入されたことを指摘してくれてありがとう。ハンドルバー(v.1.3.0.js)を使って作業していることがわかって初めて、 –

0

まだ!

それは数回示唆されているとのオープンチケットがあります:https://github.com/wycats/handlebars.js/issues/392

彼らの引数は、それが必要とされていないということですが、それが識別できるパフォーマンス上のオーバーヘッドと安い修正であれば、私はなぜ表示されませんそれを含めることはできません。

2

はい、1、基本的にhttp://www.my2ndgeneration.com/TemplateLanguageDoc.aspx#xroot

を参照してください{{xRoot}}このヘルパーやビンゴを追加するにはトップに行くことができますIを作成している...

私はいつものように、ハンドルバーに私のJSONデータを渡しますこの:それは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 + "']"; 
    } 
}; 
に私を取るとき

{ data: self.data } 

ので、以下のコードは、常に「データ」を返します

6

コンテキストを変更すると、テンプレートのルートコンテキストにアクセスする可能性はありません。 詳細

関連する問題