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}

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.

Était-ce utile?

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)

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

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}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top