0

JSONオブジェクトにノックアウトjsをバインドしています

var SettingsModel = function(globalSettings) {
    var self = this;
    if  (globalSettings == null)
    {
         globalSettings = {"v1":null,"v2":null};                  
    }
    self.globalSettings = ko.observable(globalSettings);
    self.v3 = ko.computed(function(){
                    var dd = self.globalSettings().v1;
                    var dd1 = self.globalSettings().v2;
                    return self.globalSettings().v1 * 3;
            });
};

<input type="text" data-bind="value: globalSettings().v1" 
       id="MStartTime" placeholder="Choose date" class="form-control" />

計算されたは、初期化中に一度だけ呼び出されます。Jsonプロパティが変更された場合に機能させる方法、または計算されたものを常に呼び出す方法は?

4

3 に答える 3

0

ワイルドな推測ですが、原則として、それをリッスンするには self.globalSettings() を「登録」するだけで十分ではありませんか? お気に入り :

self.v3 = ko.computed(function(){

                self.globalSettings();
                var dd = self.globalSettings().v1;
                var dd1 = self.globalSettings().v2;
                return self.globalSettings().v1 * 3;
});

そのため、globalSettings().v1 のようなプロパティが変更されるたびに、監視された globalSettings() が変更され、計算されたものがトリガーされます

于 2014-06-13T09:13:43.567 に答える
0

gobalSettings オブジェクトをオブザーバブルなどに変更するのが難しい場合は、ダミーのオブザーバブルを使用して問題を回避し、オブジェクトが変化したnotifySubscribersときにトリガーすることができます

http://jsfiddle.net/5gVFK/2

于 2014-06-13T10:49:21.683 に答える
0

マッピングプラグインobservableを使用するか、次のようにプロパティを作成する必要があります。

var SettingsModel = function(globalSettings) {
    var self = this;
    if  (globalSettings == null)
    {
         //create observables here
         globalSettings = {"v1":ko.observable(null),"v2":ko.observable(null)};
    }
    self.globalSettings = ko.observable(globalSettings);
    self.v3 = ko.computed(function(){
                    var dd = self.globalSettings.v1(); //notice the parenthesis
                    var dd1 = self.globalSettings.v2();
                    return self.globalSettings.v1() * 3;
            });
};
于 2014-06-13T09:22:58.353 に答える