17

抱歉,如果这已经被问过一百万次,但我似乎无法在任何地方找到令人满意的答案。

我正在尝试构建一个车把助手来绑定到我的 i18n 库,我需要它接受任意数量的命名参数,如下所示:

{{i18n yml.text.definition count=2 name="Alex" ... param="hello}}

这将转化为这样的调用:

i18n.t("yml.text.definition", { count: 2, name: "Alex", ... param: "hello"})

这是可能的,还是我完全脱离了我的树?

4

2 回答 2

17

提供以下帮助:

{{myHelper "foo" this ... key=value ...}}

您可以使用以下声明获取数据:

Ember.Handlebars.helper('name', function(param1, param2, options) {
  param1 // The string "foo"
  param2 // some object in that context
  options.hash // { key: value }
});

函数的每个参数都是{{myHelper param1 param2}}传入的参数。但剩下的将是一个带有一些特殊/私人信息的对象。使用该对象,您可以使用散列对象检索 key=value 信息。

如果提供给助手的参数被引用,如“param1”,则返回字符串,否则将解析为该上下文中的某个对象。

在您的情况下,您将需要:

Ember.Handlebars.helper('i18n', function(property, options) {        
    var hash = options.hash;    
    return 'i18n.t(' + property + ', { count: ' + hash.count + ', name: ' + hash.name + ', param: ' + hash.param + '})';
});

这是一个 jsfiddle 这个工作http://jsfiddle.net/marciojunior/64Uvs/

我希望它有帮助

于 2013-09-19T23:57:26.103 回答
0

尝试这个:

Ember.Handlebars.registerBoundHelper('i18n', function(context, block) {
  return i18n.t(context, { count: block.hash.count, name: block.hash.name, ... param: block.hash.param}); 
});
于 2013-09-19T23:26:56.837 回答