Handlebars.js: est-il possible de rendre un partiel à partir d'un assistant personnalisé ?

Créé le 10 juil. 2015  ·  4Commentaires  ·  Source: handlebars-lang/handlebars.js

Je voudrais faire quelque chose comme ce qui suit -

Handlebars.registerHelper('include', function(path, options) {
  return Handlebars.renderPartial(path, context, hash); //this is a js interface which matches the hbs partial interface
});

ma principale raison de vouloir cela est que j'ai des partiels que j'aimerais utiliser avec la syntaxe d'assistance. mon assistant pourrait également étendre une fonctionnalité partielle. par exemple, il pourrait prendre le contenu du bloc et le transmettre en tant que var dans le modèle partiel en tant que var de contexte.

Commentaire le plus utile

Vous pouvez compiler et restituer n'importe quelle chaîne à l'intérieur de l'assistant. Donc, si vous avez déjà ajouté vos partiels avec Handlebars.registerPartial('my-partial', 'my partial content') , vous pouvez le faire...

Handlebars.registerHelper('include', function (path, options) {
  var partial = Handlebars.partials[path];
  if (typeof partial !== 'function') {
    partial = Handlebars.compile(partial);
  }
  return partial(context); // build up the context some how
});

Ensuite, utilisez-le dans des guidons comme {{include 'my-partial'}} .

Tous les 4 commentaires

Vous pouvez compiler et restituer n'importe quelle chaîne à l'intérieur de l'assistant. Donc, si vous avez déjà ajouté vos partiels avec Handlebars.registerPartial('my-partial', 'my partial content') , vous pouvez le faire...

Handlebars.registerHelper('include', function (path, options) {
  var partial = Handlebars.partials[path];
  if (typeof partial !== 'function') {
    partial = Handlebars.compile(partial);
  }
  return partial(context); // build up the context some how
});

Ensuite, utilisez-le dans des guidons comme {{include 'my-partial'}} .

merci @doowb

Handlebars.compile fonctionne-t-il dans handlebars-runtime ?

j'aurais encore besoin d'un moyen de passer les paramètres de hachage

L'exécution de Handlebars omet explicitement la méthode compile . Vous pouvez passer vos propres paramètres de hachage en les passant dans l'appel à partial.

Fermeture car ce n'est pas une demande de fonctionnalité mais il n'y a pas eu d'activité depuis quelques jours.

Je sais que c'est fermé et vieux, mais il n'a pas de réponse ou d'exemple. Je fais cela et cela semble fonctionner pour les cas simples que j'ai essayés - je n'ai pas essayé les cas complexes.

<!-- compiled as Handlebars.template.displayName -->
{#each this}}
Hello {{#if isMale}}Mr.{{else}}Mrs.{{/if}} {{renderPartial nameRenderer this}}
{{/each}}
Handlebars.registerPartial("capital", "{{captialize firstname}} {{captialize middleName}} {{captialize lastname}}");
Handlebars.registerPartial("midinit", "{{upper firstname}} {{upper middleName}} {{upper lastname}}");
Handlebars.registerPartial("midinit", "{{firstname}} {{firstChar middleName}} {{lastname}}");
Handlebars.registerHelper('renderPartial', function(partial, context) {
    return Handlebars.compile(Handlebars.partials[partial])(context);
});
Handlebars.registerHelper('firstChar', function(name) {
    return name.substring(0,1);
});
Handlebars.registerHelper('upper', function(name) {
    return name.toUpperCase();
});
Handlebars.registerHelper('captialize', function(name) {
    return name.substring(0,1).toUpperCase() + name.substring(1);
});
var data = [{
  isMale: true,
  firstname: "david",
  middleName: "tom",
  lastname: "henry",  
  nameRenderer: "capital"
}, {
  isMale: true,
  firstname: "david",
  middleName: "tom",
  lastname: "henry",  
  nameRenderer: "midinit"
}, {
  isMale: false,
  firstname: "nancy",
  middleName: "tracey",
  lastname: "henry",  
  nameRenderer: "uppercased"
}];

Handlebars.template.displayName(data);
/* returns
Hello Mr. David Tom Henry
Hello Mr. david t henry
Hello Mrs. NANCY TRACEY HENRY
*/
Cette page vous a été utile?
0 / 5 - 0 notes