8

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

Ember はデータを通貨形式ではなく数値 (1000.50) として受け取ります。ビューを、nice 形式の計算済みプロパティにバインドします。これが私の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')
});

問題は、ユーザーが入力フィールドの金額を変更すると、モデルの基になる「金額」プロパティが更新されないことです-計算されたプロパティにバインドされているためだと思います。

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

最終的に、「金額」プロパティは、サーバー側で永続化されるものです。計算されたプロパティは、UI の書式設定を行う場所であると考えています。通常、この種の書式設定にはハンドルバー ヘルパーを使用しますが、TextField の valueBinding をハンドルバー ヘルパーの結果と組み合わせることはできません。

よろしくお願いします。アンドリュー

4

1 に答える 1

7

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

amountFmt: function(key, value) {
  if (value) {
    // setter
  } else {
    // getter
  }
}.property('amount')
于 2013-06-29T03:51:46.420 に答える