将文本输入中的计算属性绑定到Ember.js

时间:2014-09-22 13:24:31

标签: ember.js

我正在使用Bindings Computed Property in Ember TextField的答案,但希望稍稍扩展一下。

这是我的模板:

{{input id="dollars" name="dollars" value=formattedDollars class="form-control"}}

在我的控制器中:

formattedDollars: function(key, value) {
    var model = this.get('model');
    if(value) {
        //This is the setter--make sure the stored value is an integer
        model.set('dollars', +value.toString().replace(/[^\d]/, ""));
    } else {
        //This is the getter--return a formatted value
        return model.get('dollars').toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    }
}.property('model.dollars')

如果我在文本字段之外设置formattedDollars(例如model.incrementProperty('dollars', 10)),则此方法有效,但如果我实际在文本输入中输入,则该值不会保持格式化。

我也尝试在setter中返回value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","),但这也不起作用。如何才能在dollars输入字段中输入以自动格式化数字?

1 个答案:

答案 0 :(得分:1)

在获取或设置计算属性时,必须在两种情况下都返回值。 所以你的代码应该是:

formattedDollars: function(key, value) {
    var model = this.get('model');
    if(arguments.length > 1) {
        //This is the setter--make sure the stored value is an integer
        model.set('dollars', +value.toString().replace(/[^\d]/, ""));
    } 
    //This is the getter--return a formatted value
    return model.get('dollars').toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    
}.property('model.dollars')