Chiamando Helper In caso di blocco in Manubrio Template
-
27-10-2019 - |
Domanda
Sto lavorando con template engine Handlebars.js e sto cercando di capire un modo per fare qualcosa di simile (esempio inventato):
{{#if itemSelected "SomeItem"}}
<div>This was selected</div>
{{/if}
dove itemSelected
è un aiutante registrato in questo modo:
Handlebars.registerHelper("itemSelected", function(item) {
var selected = false;
// Lots of logic that determines if item is selected
return selected;
});
ricevo gli errori quando si cerca di utilizzare questa sintassi per il modello, e non riesco a trovare alcun esempio che mostra questo genere di cose. Vedo semplici blocchi #if come questo ...
{{#if myValueInContext}}
<div>This will show if myValueInContext results in a truthy value.</div>
{{/if}}
Ma, non riesco a capire come affrontare il primo esempio. Forse mi sto avvicinando questo torto.
A proposito, ho taggato questo Baffi come non ho potuto aggiungere un tag manubrio per la questione.
Soluzione
Non credo che questo sta andando a lavorare. Se ho ben capito la documentazione manubrio corretto, il #if è un blocco-helper registrata per sé e non ci vuole un altro aiutante registrato come argomento.
Secondo la documentazione si potrebbe implementare in quel modo
Handlebars.registerHelper('ifItemSelected', function(item, block) {
var selected = false;
// lots of logic that determines if item is selected
if(selected) {
return block(this);
}
});
In seguito si dovrebbe essere in grado di chiamare con
{{#ifItemSelected SomeItem}}
This was selected
{{/ifItemSelected}
, ma è necessario assicurarsi che SomeItem ha il formato corretto. Non vedo un modo per utilizzare un gestore registrato come condizionale in un se-dichiarazione.
Altri suggerimenti
Si dovrebbe aggiungere parentesi attorno l'invocazione aiutante incorporato:
{{#if (itemSelected "SomeItem")}}
<div>This was selected</div>
{{/if}
Ho fatto esperimenti e verificato che funziona solo.
Non sono sicuro se è menzionato nella documentazione manubrio. Ho imparato il trucco dagli esempi di manubrio-layout .
Con la versione precedente (1.0.rc.1) del manubrio, è necessario sth scrivere come:
Handlebars.registerHelper('ifItemSelected', function(item, options) {
var selected = false;
// lots of logic that determines if item is selected
if (selected) {
return options.fn(this);
}
});
es. blocco (questa) è sostituito dal options.fn (questo)
Se si desidera avere un'opzione altrimenti troppo, avrete bisogno di questo codice:
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);
}
});
Utilizzato con:
{{#ifItemSelected SomeItem}}
This was selected
{{else}}
This was not selected
{{/ifItemSelected}