3 votes

Handlebars.js - Contextes globaux

Disons que j'ai une liste statique d'utilisateurs mise en cache quelque part dans mon application, par exemple App.Users . Je vais probablement avoir besoin de lister mes utilisateurs à plusieurs dizaines d'endroits dans mon application. Par convention, il me suffira de transmettre ma liste avec mon contexte au modèle.

var tmpl = Handlebars.templates['TemplateName'];

var html = tmpl({
    model: model,
    users: App.Users
});

Mais cette approche nécessite un certain câblage à la fois dans le modèle et dans le javascript. Ce que j'aimerais faire, c'est spécifier cela dans le modèle seul afin que je n'aie pas besoin de m'en souvenir dans mes scripts. Considérez quelque chose comme ceci...

{{#each {{users}}}}
    <li> ... </li>
{{/each}}

...où users est une fonction d'aide qui renvoie simplement mon App.Users . Ce serait bien, non ?

Donc ça ne compile pas du tout. Quelle est une autre solution ?

7voto

Spencer Avinger Points 1204

Nous avons opté pour une fonction d'aide abstraite... qui, soyons honnêtes, semble être la solution à 99% des questions relatives au guidon.

Handlebars.registerHelper('global', function(context, options) {
    return options.fn(App.[context].toJSON()); // Object is Backbone Collection
})

Et utilisé dans un exemple...

{{#global "Users"}}
    {{#each this}}
         <th>{{Name}}</th>
    {{/each}}
{{/global}}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X