Handlebars.js si l’assistant de blocage ==

Comment changeriez-vous le code suivant pour le faire fonctionner? Le problème est l’expression this == ‘some message’:

    {{#each errors}} {{#if (this == 'some message') }}
  • Status
  • {{else}}
  • {{this}}
  • {{/if}} {{/each}}

Le plus simple serait d’append un assistant if_eq personnalisé:

 Handlebars.registerHelper('if_eq', function(a, b, opts) { if(a == b) // Or === depending on your needs return opts.fn(this); else return opts.inverse(this); }); 

puis ajustez votre modèle:

 {{#if_eq this "some message"}} ... {{else}} ... {{/if_eq}} 

Démo: http://jsfiddle.net/ambiguous/d4adQ/

Si vos entrées d’ errors n’étaient pas des chaînes simples, vous pourriez leur append les indicateurs “is this some message” et utiliser un standard {{#if}} (notez que l’ajout d’une propriété directement à une chaîne ne fonctionnera pas correctement):

 for(var i = 0; i < errors.length; ++i) errors[i] = { msg: errors[i], is_status: errors[i] === 'some message' }; 

et:

 {{#if is_status}} 
  • Status
  • {{else}}
  • {{msg}}
  • {{/if}}

    Démo: http://jsfiddle.net/ambiguous/9sFm7/

    Ancienne question, mais si vous utilisez la bibliothèque d’aide de Swag Handlebars d’ Elving, vous pouvez utiliser les helpers is et isnt .

    Cela peut également être réalisé en utilisant des sous- expressions de guidon.

    Modèle –

       

    Javascript –

     var errors = [ 'Where is pancakes house?', 'some message', 'One cent stamp' ]; Handlebars.registerHelper('is_status', function(msg, matchMsg, options) { if(msg === matchMsg) return true; else return false; }); var tmplStatus = Handlebars.comstack($('#tmplStatus').html()), domStatus = tmplStatus({ errors: errors }); $('body').append(domStatus); 

    Démo de travail: http://jsfiddle.net/techgeeek/b99qwtpw/