Est-il possible d’imbriquer des helpers dans les options hash avec le guidon?

Par exemple, y a-t-il un moyen d’imbriquer mon assistant ” i18n ” dans la variable de hachage d’un autre assistant?

{{view "SearchView" placeholder="{{t 'search.root'}}" ref="search" url="/pages/search" className='home-search' polyfill=true}} 

Mise à jour: Handlebars prend désormais en charge les sous – expressions , vous pouvez donc faire ce qui suit:

 {{view "SearchView" (t 'search.root')}} 

Votre scénario n’est pas directement pris en charge, mais vous pouvez utiliser quelques solutions de contournement. Les helpers du guidon ne sont que du code javascript, vous pouvez donc les exécuter depuis le code helper lui-même:

 function translateHelper() { //... } function viewHelper = function(viewName, options) { var hash = options.hash; if(hash.placeholder) { hash.placeholder = translateHelper(hash.placeholder); } }; Handlebars.registerHelper('view', viewHelper); Handlebars.registerHelper('t', translateHelper); 

Et passez simplement la clé i18n en argument:

 {{view placeholder="search.root"}} 

C’est bien, du moment que votre assistant sait quels arguments doivent être localisés et lesquels ne le sont pas. Si ce n’est pas possible, vous pouvez essayer d’exécuter tous les arguments d’aide via Handlebars, s’ils contiennent une expression de guidon:

 function resolveNestedTemplates(hash) { _.each(hash, function(val, key) { if(_.isSsortingng(val) && val.indexOf('{{' >= 0)) { hash[key] = Handlebars.comstack(val)(); } }); return hash; } function view(viewName, options) { var hash = resolveNestedTemplates(options.hash, this); } 

Et utilisez la syntaxe de modèle nestede que vous avez décrite:

 {{view placeholder="{{t 'search.root'}}" }} 

Je me rends compte qu’aucune de ces options n’est parfaite, mais elles sont les meilleures que je puisse imaginer.