2013-06-28 8 views
23

Gibt es eine integrierte Methode für den Zugriff auf den Stammkontext in einer Handlebars.js-Vorlage? Die meisten Helfer fügen einen verschachtelten Kontext hinzu, und Sie müssen ../ vor der Variable in diesem Kontext schreiben, um darauf zuzugreifen, aber das ist nicht sehr praktisch, wenn Sie viele von jedem, ifs, usw. haben.Zugriff auf den Stammkontext in der Vorlage "Handlebar.js"

Antwort

42

Verwenden @root. Dies ist im Lenker-v2.0.0.js

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

Sie können @root auch in 'if' und' each' Blöcken, z. '{{@each @ root.somthing.nested_somthing}}' – user393274

+0

Danke für das Hinweis auf die Version, wo es eingeführt wurde. Wir versagten, bis wir feststellten, dass wir mit Lenker arbeiten - v.1.3.0.js –

0

Nicht als noch!

Es wurde ein paar Mal vorgeschlagen, und es ist ein offenes Ticket: https://github.com/wycats/handlebars.js/issues/392

Ihr Argument ist, dass es nicht erforderlich ist, aber wenn es eine billige fix ohne erkennbare Performance-Overhead ist sehe ich nicht, warum es kann nicht enthalten sein.

2

Ja, ich habe ein http://www.my2ndgeneration.com/TemplateLanguageDoc.aspx#xroot

Grundsätzlich sehen erstellt, fügen Sie diese Helfer und Bingo {{XROOT}} werden Sie ganz nach oben ...

ich immer meine JSON-Daten in Lenkern passieren wie dies:

{ data: self.data } 

somit der Code unten immer wieder „Daten“, wenn es der XROOT Tag sieht und nimmt mich an die Spitze

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 + "']"; 
    } 
}; 
6

Es gibt keine Möglichkeit, auf den Stammkontext der Vorlage zuzugreifen, nachdem Sie den Kontext mit Schleifen (z. each) more info

Allerdings besteht die Möglichkeit, mit vorherigem Kontext zuzugreifen '../'

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

Vorlage:

<!-- 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> 

Scheck http://handlebarsjs.com/#paths für weitere Informationen

Verwandte Themen