web-dev-qa-db-fra.com

Accès au contexte racine dans le modèle Handlebar.js

Existe-t-il une méthode intégrée pour accéder au contexte racine dans un modèle Handlebars.js? La plupart des helpers ajoutent un contexte imbriqué et vous devez écrire ../ avant la variable dans ce contexte pour y accéder, mais n'est pas très pratique si vous avez beaucoup de chacun, si, etc.

26
isHristov

Utilisez @root. Ceci est dans le guidon-v2.0.0.js 

{{@root.somthing.nested_somthing}}
53
jaegow

il n’est pas possible d’accéder au contexte racine du modèle une fois que vous avez changé le contexte avec boucle (par exemple, chacun) plus d’infos

Cependant, il est possible d'accéder au contexte précédent avec '../' 

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

modèle:

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

vérifiez http://handlebarsjs.com/#paths pour plus d'informations

5
equivalent8

Oui, j'en ai créé un. http://www.my2ndgeneration.com/TemplateLanguageDoc.aspx#xroot

En gros, ajoutez cet assistant et le bingo {{xRoot}} vous mènera au sommet ...

Je passe toujours mes données JSON au guidon comme ceci:

{ data: self.data } 

ainsi le code ci-dessous retourne toujours "data" quand il voit la balise xRoot et m'emmène au sommet

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 + "']";
    }
};
2
Mike Griffin

Pas encore!

Il a été suggéré plusieurs fois et il existe un billet ouvert: https://github.com/wycats/handlebars.js/issues/392

Leur argument est que ce n'est pas obligatoire, mais s'il s'agit d'un correctif bon marché sans surcoût de performance discernable, je ne vois pas pourquoi il ne pourrait pas être inclus.

0
sidonaldson