Appel Helper Dans Si la case dans Guidons modèle
-
27-10-2019 - |
Question
Je travaille avec le moteur modèle Handlebars.js et essaie de trouver un moyen de faire quelque chose comme ceci (exemple artificiel):
{{#if itemSelected "SomeItem"}}
<div>This was selected</div>
{{/if}
où itemSelected
est une aide enregistrée comme ceci:
Handlebars.registerHelper("itemSelected", function(item) {
var selected = false;
// Lots of logic that determines if item is selected
return selected;
});
Je reçois des erreurs en essayant d'utiliser cette syntaxe pour le modèle, et je ne peux pas trouver un exemple montrant ce genre de chose. Je ne vois simples blocs de #if comme celui-ci ...
{{#if myValueInContext}}
<div>This will show if myValueInContext results in a truthy value.</div>
{{/if}}
Mais, je ne peux pas comprendre comment aborder le premier exemple. Peut-être que je me rapproche de ce mal.
Par ailleurs, je tagged cette Mustache que je ne pouvais pas ajouter une balise Guidons à la question.
La solution
Je ne pense pas que cela va travailler. Si je comprends bien la documentation guidon correct, le #if est un bloc auxiliaire enregistré lui-même et ne prend pas une autre aide enregistrée comme argument.
D'après la documentation que vous pourriez mettre en œuvre comme ça
Handlebars.registerHelper('ifItemSelected', function(item, block) {
var selected = false;
// lots of logic that determines if item is selected
if(selected) {
return block(this);
}
});
Ensuite, vous devriez pouvoir l'appeler avec
{{#ifItemSelected SomeItem}}
This was selected
{{/ifItemSelected}
mais vous devez vous assurer SomeItem a le bon format. Je ne vois pas un moyen d'utiliser un gestionnaire enregistré comme condition dans une instruction if.
Autres conseils
Vous devriez ajouter des parenthèses autour de l'invocation d'aide intégré:
{{#if (itemSelected "SomeItem")}}
<div>This was selected</div>
{{/if}
Je l'ai fait des expériences et vérifié qu'il fonctionne.
Je ne sais pas s'il est mentionné dans la documentation guidons. J'ai appris l'affaire des exemples de -guidon mises en page.
Avec dernière version (1.0.rc.1) de guidons, vous devez STH d'écriture comme:
Handlebars.registerHelper('ifItemSelected', function(item, options) {
var selected = false;
// lots of logic that determines if item is selected
if (selected) {
return options.fn(this);
}
});
ie. bloc (ce) est remplacé par options.fn (this)
Si vous voulez avoir une option autre aussi, vous aurez besoin de ce code:
Handlebars.registerHelper('ifItemSelected', function(item, options) {
var selected = false;
// lots of logic that determines if item is selected
if (selected) {
return options.fn(this);
}
else {
return options.inverse(this);
}
});
Utilisé avec:
{{#ifItemSelected SomeItem}}
This was selected
{{else}}
This was not selected
{{/ifItemSelected}