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.

È stato utile?

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)

http://handlebarsjs.com/block_helpers.html#conditionals

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}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top