我有knockoutjs绑定到JSON对象
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" />
计算在init期间只调用一次。如何使它适用于Json属性被更改或只是一直调用计算?
答案 0 :(得分:0)
狂野的猜测,但原则上不应该注册&#34;注册&#34; 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()会发生变化,计算结果会被触发
答案 1 :(得分:0)
您必须使用mapping plugin制作属性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;
});
};
答案 2 :(得分:0)
如果gobalSettings对象很难改变为observables等,你可以解决使用虚拟observable的问题,并在对象变异时触发它notifySubscribers