ember.js hbs在TextFieldView中查看帮助器

时间:2013-12-30 23:37:28

标签: javascript ember.js handlebars.js

我是ember.js的新手。我有一个自定义视图助手:

Ember.Handlebars.helper('translate', function(value, options) {
    return JoblyApp.i18n.__(value) || options.hash.def;
});

我需要在TextField中应用这个帮助器:

{{view Ember.TextField valueBinding="somevalue" placeholder="{{translate "city_or_region"}}" }}

我怎样才能实现这一目标?

2 个答案:

答案 0 :(得分:1)

您不能在其他车把助手内使用车把助手。我会通过扩展Ember.TextField来自动翻译占位符来解决这个问题。

我创建了这个JSBin demo注意:它不会翻译,它使用虚函数来大写占位符文本。替换为您的功能。

扩展输入:

JoblyApp.TranslateableTextFieldView = Ember.TextField.extend({
    didInsertElement: function(){
        for(var key in this){
            if(key.substr(0,2)==="t_"){
                var value = this.get(key);
                this.set(key.substr(2, key.length - 2), JoblyApp.i18n.__(value));
            }
        }
    }
});

用法:

{{view JoblyApp.TranslateableTextFieldView valueBinding="somevalue" t_placeholder="city_or_region"}}

注意我使用t_作为搜索的前缀,而不是__,因为Ember在其对象的私有成员上使用此键。因此,我会避免使用此前缀来防止冲突。

答案 1 :(得分:0)

这就是诀窍:

App.TranslateableTextFieldView= Ember.TextField.extend({
      didInsertElement: function() {
        for (var key in this) {
            if (key.substr(0,2) == '__') {
                var keyName = key.substr(2, key.length);
                var value = this.get(key);
                this.set(keyName,App.i18n.__(value));
            }
        }
      }
    });