是否有可能的选项里窝佣工车把哈希?(Is it possible to nest helpers i

2019-07-19 16:09发布

举例来说,有没有办法在其中嵌套另一个助手的散列变量在我的“ 国际化 ”帮手?

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

Answer 1:

更新:车把现在支持的子表达式 ,所以你可以这样做:

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


Answer 2:

你的情况是不直接支持,但也有一对夫妇的解决方法,你可以使用。 车把助手只是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);

而刚刚通过国际化关键的参数:

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

这是很好的,只要你的助手知道哪些参数应该是局部的,并没有。 如果这是不可能的,你可以尝试通过把手上运行的所有辅助参数,如果它们包含一个车把表达式:

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'}}" }}

我知道没有这些选项是完美的,但他们是我能想到的最好的。



文章来源: Is it possible to nest helpers inside the options hash with handlebars?