2

これは、答えをグーグルで検索しようとした後の最初の投稿です。これが以前にどこかで回答されていた場合、私を適切な場所に誘導するのを手伝っていただければ、それは素晴らしいことです.

2 つのフィールド間で双方向バインディングを行う方法を見つけようとしています。

フォームに重量計算を行う 2 つのフィールドがあります。フィールド 1 に重量をポンドで入力すると、Knockout は重量をキログラムで計算してフィールド 2 に入力します。私はこれに問題はありません。これが私のjsfiddleです http://jsfiddle.net/ubiquitous_tom/tVh3g/

var weight = 180;
self.weight = ko.observable(weight.toFixed(2));
self.weightKG = ko.computed(function(){
    var kg_weight = parseFloat(self.weight())/2.2;
    return !isNaN(kg_weight) ? kg_weight.toFixed(2) : undefined;
});

今私が抱えている問題は、体重をキログラム単位でフィールド 2 に入れようとしているときです。ポンド単位の重量をフィールド #1 に計算する必要がありますが、実行しません。両方のフィールドで計算された「読み取り」と「書き込み」を使用しようとするすべてのコードで無限ループエラーが発生するため、それを機能させる方法がわかりません。

誰かが私を助けることができれば、それは素晴らしいことです. これは非常に単純なことだと確信していますが、私は Knockout にまったく慣れていないため、正しく機能させる方法がよくわかりません。ここに私が取り組んでいるもののjsfiddleがありますhttp://jsfiddle.net/ubiquitous_tom/VmZLZ/

var weight = 180;
self.weight = ko.observable(weight.toFixed(2));
self.weightKG = ko.computed({
    read: function() {
        return parseFloat(self.weight().toFixed(2));
    },
    write: function(newValue) {
        var kg_weight = parseFloat(newValue)/2.2;
        return !isNaN(kg_weight) ? kg_weight.toFixed(2) : undefined;
    }
});
4

1 に答える 1

2

ここに実用的なフィドルがあります:http://jsfiddle.net/jearles/VmZLZ/6/

重要なのは、書き込み可能な計算されたフィールドの読み取りと書き込みの両方で、他の監視可能なフィールドを参照することです。計算されたものを読み取ると、「マスター」フィールドから計算され、計算されたものに書き込むと、「マスター」フィールドが再計算されます。

--

function weightModel() {
    var self = this;
    var weight = 180;
    self.weight = ko.observable(weight.toFixed(2));
    self.weightKG = ko.computed({
        read: function() {
            return !isNaN(self.weight()) ? 
               (self.weight() / 2.2).toFixed(2) : undefined;
        },
        write: function(newValue) {
            var pd_weight = !isNaN(newValue) ?
                   (parseFloat(newValue) * 2.2).toFixed(2) : undefined;
            self.weight(pd_weight);
        }
    });
}
ko.applyBindings(new weightModel());
于 2013-04-24T01:42:45.883 に答える