Passer une fonction dans un modèle Handlebars

J'utilise (ou du moins à partir de) HandlebarsJS pour les modèles html, mais je pourrais avoir frappé une impasse. Ce que je veux, c'est passer une fonction au modèle, par exemple

<div id="divTemplate"> <span onclick="{{func}}">{{text}}</span> </div> 

Et je m'attends à avoir quelque chose comme

 var source = $('#divTemplate').html(); var template = Handlebars.compile(source); var data = { "text": "Click here", "func": function(){ alert("Clicked"); } }; $('body').append(template(data)); 

Mais la fonction est exécutée sur init, elle n'est pas transmise au modèle et le résultat est:

 <span onclick="">Click here</span>. 

J'essayais d'autres choses avec les fonctions d'assistant, mais je ne pouvais pas le faire aussi. Toute idée serait appréciée. 🙂

La solution est très simple.

Les guidons afficheront les propriétés de l'objet que vous passez dans les modèles, si la propriété est une fonction , elle exécutera la fonction et produira la valeur retournée

Dans votre exemple, la fonction ne renvoie aucune valeur (elle appelle juste l'alerte), de sorte que la sortie est vide.

Vous pouvez créer une méthode helper comme ceci:

 handlebars.registerHelper('stringifyFunc', function(fn) { return new Handlebars.SafeString("(" + fn.toString().replace(/\"/g,"'") + ")()"); }); 

Ensuite, à partir du modèle, il suffit de l'utiliser sur la fonction qui doit être stringifiée:

 <div id="divTemplate"> <span onclick="{{stringifyFunc func}}">{{text}}</span> </div>