2013-06-28 9 views
8

Ember.jsのテキストフィールドにデータモデルをバインドしようとしています。このモデルには、通貨価値($ 1,000.50など)を表すフィールドがあります。ユーザーはこの値を変更できます。Ember TextFieldのBindings Computedプロパティ

Emberは、フォーマットされた番号(1000.50)の通貨としてデータを受信します。私は良いフォーマットを持つ計算されたプロパティにビューをバインドします。ここに私のハンドルバーのテンプレートです。以下のように私のモデルに見える

{{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と仮定ので、計算されたプロパティにバインドされています。

ユーザーの入力を受け取り、必要に応じて解析して検証し、 'amount'プロパティに格納する正しい方法は何ですか? 2つのプロパティ間でバインディング/オブザーバを使用する必要がありますか?これはどのように機能しますか?

最終的に、 'amount'プロパティは、取得されたサーバー側のものです。私は実際には、計算されたプロパティをUI書式設定を行う場所と見なしています。私は通常、この種の書式設定のためにHandlebarsヘルパーを使用しますが、TextFieldのvalueBindingとHandlebarsヘルパーの結果を組み合わせることはできません。

ご協力いただきありがとうございます。 Andrew

答えて

7

計算されたプロパティamountFmtの関数は、コンテキストに応じてゲッターとセッターの両方として機能します。署名はamountFmt(key, [value])です。値はオプションで、値を変更するときにのみ渡されます。

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

ダングジーナ私はこの回答を永遠に探していました!役に立った!私はこれをドキュメントで見たことがありません。それは文書化されていないのですか、それとも私はそれを見逃しましたか? – bfcoder

+0

これは、http://emberjs.com/api/classes/Ember.computed.html#contentに今書かれているようです。計算されたプロパティー関数は、getおよびset関数を提供するハッシュで使用できるようになりました。 –

関連する問題