2013-06-28 119 views
8

我試圖將我的數據模型綁定到Ember.js中的文本字段。該模型有一個表示貨幣價值的字段(例如$ 1,000.50)。用戶然後可以更改此值。在Ember TextField中綁定計算屬性

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') 
}); 

的問題是,當用戶在輸入字段改變量,在我的模型底層的「量」屬性沒有更新-I假設,因爲它被綁定到計算屬性。

接受用戶輸入,解析和驗證(如有必要),並將其存儲在「金額」屬性中的正確方法是什麼?我應該在兩個屬性之間使用綁定/觀察者嗎?這將如何工作?

最終,'金額'屬性是得到持久的服務器端。我真的只是考慮計算屬性做UI格式的地方。我通常會使用Handlebars助手來進行這種格式化,但是您無法將TextField的valueBinding與Handlebars助手的結果組合在一起。

在此先感謝您的幫助! Andrew

回答

7

計算屬性amountFmt的函數根據上下文同時充當getter和setter。簽名是amountFmt(key, [value])。該值是可選的,只有在值被更改時才傳入。

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

Dang Gina我一直在尋找這個答案永遠!優步幫助!我從來沒有在文檔中看到過。它沒有記錄或我只是忽略了它? – bfcoder

+0

現在,這似乎已記錄在http://emberjs.com/api/classes/Ember.computed.html#content中。計算出的屬性函數現在可以與提供get和set函數的散列一起使用。 –