我有字段A = A1 + A2
字段B = B1 + B2
字段C= A + B
当我更改A1, A2, B1, B2
时
A,B,C正常工作。
我尝试手动更改值字段A或字段B然后希望字段C = A + B
但不是:(。为什么?以及如何修复?
请帮我!非常感谢你!
答案 0 :(得分:1)
您的变量可以是ko.observable(“”)或ko.computed。但不可能两者兼而有之。当您更改A或B时,不会被观察到。因此,C的值没有变化。当您更改A1,A2,B1,B2时,它会更改A,B和C的值。这是预期的行为。
答案 1 :(得分:1)
这里是jsfidle,注意subscribe函数检测observable中的任何变化并进行操作,newval是你输入的新值,因为另一个朋友说你不能同时做可观察和计算。当a1,a2中的更改发生A更新时,当A和B中的更改发生时C更新,我还建议您使用self来命名所有变量。 投票给我作为接受的答案:)
var ViewModel = function () {
self = this;
self.A1 = ko.observable(0);
self.B1 = ko.observable(0);
self.A2 = ko.observable(0);
self.B2 = ko.observable(0);
self.A = ko.observable(0);
self.B = ko.observable(0);
self.C = ko.observable(0);
self.A1.subscribe(function(newval){
self.A(parseFloat(newval) + parseFloat(self.A2()))
});
self.A2.subscribe(function(newval){
self.A(parseFloat(self.A1()) + parseFloat(newval));
});
self.B1.subscribe(function(newval){
self.B(parseFloat(newval) + parseFloat(self.B2()))
});
self.B2.subscribe(function(newval){
self.B(parseFloat(self.B1()) + parseFloat(newval));
});
self.A.subscribe(function(newval){
self.C(parseFloat(newval) + parseFloat(self.B()))
});
self.B.subscribe(function(newval){
self.C(parseFloat(self.A()) + parseFloat(newval));
});
};
ko.applyBindings(new ViewModel());