1

Knockout では、このページの Writable Computed Observables の下の例と非常によく似た、エントリ フィールドを自動フォーマットしようとしています。

http://www.knockmeout.net/2011/03/reacting-to-changes-in-knockoutjs.html

私が抱えている問題は、同じものに変換される値 (たとえば、1.00 と 1.0) を入力すると、Knockout は値が変更されたことを認識せず、書式設定を更新しないことです (彼のページの例を使用できます)。見てください)。フィールドを別のものに変更し、それを元に戻して Knockout の更新をトリガーするハックジョブ ソリューションを作成しましたが、誰かがより適切な修正を行っているかどうか疑問に思っていました。

ありがとう。

4

1 に答える 1

4

書き込み中の値が変更されていない場合でも、オブザーバブルが書き込み時に常に通知することがありました。私は KO 1.21 を信じているので、実際の値が変更されていない場合、オブザーバブルは通知を抑制します。

簡単な解決策はvalueHasMutated、オブザーバブルを呼び出して、通知が確実に送信されるようにすることです。

計算されたオブザーバブルを記述するためのより良い方法は、次のようになります。

//writable computed to parse currency input 
this.editPrice = ko.computed({
    //return a formatted price
    read: function() {
        return viewModel.formatCurrency(this.price());
    },
    //if the value changes, make sure that we store a number back to price
    write: function(newValue) {
        var current = this.price(),
            valueToWrite = viewModel.parseCurrency(newValue);

        //only write if it changed
        if (valueToWrite !== current) {
            this.price(valueToWrite);
        } else {
            //if the rounded value is the same, but a different value was written, force a notification for the current field
            if (newValue !== current) {
                this.price.valueHasMutated();
            }
        }
    },
    owner: this
});

この場合、解析された値が異なる場合にのみオブザーバブルに書き込み、ユーザーが現在の値とは異なる値を入力した場合にのみ通知を強制します。これにより、ユーザーが現在の価格に四捨五入する値を入力した場合でも、フィールドが更新されます。

更新されたサンプルは次のとおりです: http://jsfiddle.net/rniemeyer/6A4aN/

于 2012-07-09T17:35:13.480 に答える