是否有可能嵌套在选项哈希与帮助柄的助手?
例如,有没有办法将我的“ i18n ”助手嵌套在另一个助手的哈希variables中?
{{view "SearchView" placeholder="{{t 'search.root'}}" ref="search" url="/pages/search" className='home-search' polyfill=true}}
更新: Handlebars现在支持子expression式 ,所以你可以做:
{{view "SearchView" (t 'search.root')}}
您的scheme不直接支持,但有几个解决方法可以使用。 handlebars助手只是javascript代码,所以你可以在助手代码本身内执行它们:
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);
只要通过i18n键就可以了:
{{view placeholder="search.root"}}
这很好,只要你的帮手知道哪些参数应该被本地化,哪些不参与。 如果这是不可能的,如果它们包含一个句柄expression式,你可以尝试通过把手运行所有的辅助参数:
function resolveNestedTemplates(hash) { _.each(hash, function(val, key) { if(_.isString(val) && val.indexOf('{{' >= 0)) { hash[key] = Handlebars.compile(val)(); } }); return hash; } function view(viewName, options) { var hash = resolveNestedTemplates(options.hash, this); }
并使用您描述的嵌套模板语法:
{{view placeholder="{{t 'search.root'}}" }}
我意识到这些select都不是完美的,但他们是我能想到的最好的。