2013-06-28 25 views
23

Esiste un metodo incorporato per accedere al contesto radice in un modello Handlebars.js? La maggior parte degli helper sta aggiungendo un contesto nidificato e devi scrivere ../ prima della variabile in quel contesto per accedervi ma non è molto pratico se ne hai molti, if, ecc.Accesso al contesto radice nel modello Handlebar.js

risposta

42

Usa @root. Questo è in handlebars-v2.0.0.js

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

È anche possibile utilizzare @root in blocchi 'if' e' each', ad es. '{{#each @ root.somthing.nested_somthing}}' – user393274

+0

Grazie per aver segnalato la versione, dove è stata introdotta. Stavamo fallendo fino a quando non ci siamo resi conto che stavamo lavorando con handlebars-v.1.3.0.js –

0

Non come ancora!

E 'stato suggerito un paio di volte e non v'è un biglietto aperto: https://github.com/wycats/handlebars.js/issues/392

La loro tesi è che non è necessario, ma se si tratta di una soluzione a basso costo senza sovraccarico delle prestazioni discernibile io non vedo perché non può essere incluso.

2

Sì, ho creato uno vedi http://www.my2ndgeneration.com/TemplateLanguageDoc.aspx#xroot

In sostanza, aggiungere questo aiuto e bingo {{}} xroot vi porterà in cima ...

ho sempre passare i miei dati JSON in manubri come questo:

{ data: self.data } 

così il codice qui sotto sempre restituisce "dati" quando si vede il tag xroot e mi porta alla cima

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

non è possibile accedere al contesto radice del modello dopo aver modificato il contesto con il ciclo (ad es. ciascuno) more info

Tuttavia, v'è la possibilità di accedere contesto precedente, con '../'

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

modello:

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

controllo http://handlebarsjs.com/#paths per ulteriori informazioni

Problemi correlati