在Ember TextField中绑定计算属性

时间:2013-06-28 21:49:26

标签: binding ember.js handlebars.js

我正在尝试将我的数据模型绑定到Ember.js中的文本字段。该模型具有表示货币值的字段(例如,$ 1,000.50)。然后,用户可以更改此值。

Ember接收数据为数字(1000.50) - 不是货币格式。我将视图绑定到具有良好格式的计算属性。这是我的Handlebars模板。

{{input classNames="amount" valueBinding="p.amountFmt"}}</td>

我的模型看起来像:

App.Product = Ember.Object.extend({
  amount : 0.00,
  amountFmt: function () {
    //example. Do actual formatting with this.get('amount'); 
    var formattedNum = '1,000.50'; 
    return formattedNum;
  }.property('amount')
});

问题是,当用户更改输入字段中的金额时,我的模型上的基础'amount'属性不会更新 - 我想是因为它绑定到计算属性。

获取用户输入的正确方法是什么,必要时进行解析和验证,并将其存储在“amount”属性中?我应该在两个属性之间使用绑定/观察者吗?这将如何运作?

最终,'amount'属性是持久的服务器端。我真的只是认为计算属性是一个做UI格式的地方。我通常会使用Handlebars助手来进行这种格式化,但是你不能将TextField的valueBinding与Handlebars助手的结果结合起来。

提前感谢您的帮助! 安德鲁

1 个答案:

答案 0 :(得分:7)

计算属性amountFmt的函数同时充当getter和setter,具体取决于上下文。它的签名是amountFmt(key, [value])。该值是可选的,仅在要更改值时传递。

amountFmt: function(key, value) {
  if (value) {
    // setter
  } else {
    // getter
  }
}.property('amount')