我正在使用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
输入字段中输入以自动格式化数字?
答案 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')