たとえば、「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}}
あなたのシナリオは直接サポートされていませんが、使用できるいくつかの回避策があります。ハンドルバー ヘルパーは単なる 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'}}" }}
これらのオプションはどちらも完璧ではありませんが、私が考えることができる最高のものです。