Например, есть способ вставить мой " i18n" помощник внутри другой хеш-хеш-переменной?
{{view "SearchView" placeholder="{{t 'search.root'}}" ref="search" url="/pages/search" className='home-search' polyfill=true}}
Например, есть способ вставить мой " i18n" помощник внутри другой хеш-хеш-переменной?
{{view "SearchView" placeholder="{{t 'search.root'}}" ref="search" url="/pages/search" className='home-search' polyfill=true}}
Обновление: Handlebars теперь поддерживает subexpressions, поэтому вы можете просто сделать:
{{view "SearchView" (t 'search.root')}}
Ваш сценарий не поддерживается напрямую, но есть несколько обходных решений, которые вы можете использовать. Помощники руля - это всего лишь код 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"}}
Это хорошо, если ваш помощник знает, какие аргументы должны быть локализованы, а какие нет. Если это невозможно, вы можете попробовать запустить все вспомогательные аргументы через Handlebars, если они содержат выражение handlebars:
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'}}" }}
Я понимаю, что ни один из этих вариантов не идеален, но они самые лучшие, о чем я мог подумать.