我有以下代码:
function ViewModel() {
var self = this;
self.deckareax = ko.observable(0);
self.deckareay = ko.observable(0);
self.calculatedarea = ko.observable(20);
self.deckareax.subscribe(function () {
if (self.deckareax() == 0 || deckareay == 0) {
self.calculatedarea(0);
} else {
self.calculatedarea(self.deckareax() * self.deckareay());
}
}
);
self.deckareay.subscribe(function () {
console.log("deckareay " + self.deckareay())
if (self.deckareax() == 0 || self.deckareay() == 0) {
self.calculatedarea(0);
} else {
self.calculatedarea(self.deckareax() * self.deckareay());
}
}
);
self.deckareamxm = ko.computed({
read: function () {
return self.calculatedarea();
},
write: function (value) {
self.calculatedarea(value);
if ((self.deckareax() * self.deckareay(0)) != value) {
self.deckareax(0);
self.deckareay(0);
}
},
owner:self
});
}
;
ko.applyBindings(new ViewModel());
我希望能够通过输入deckareax * deckareay手动输入或计算来设置总面积(deckareamxm)。如果我输入结果并且(deckareax * deckareay)不等于总甲板面积x和y应该被清除。
这几乎可行,但是如果我输入总面积,它会清除两者,但也会自行清除。如果我然后再次输入它的总面积。我认为它可能变得复杂。有什么想法吗?
答案 0 :(得分:1)
This jsfiddle似乎做你想做的事。还有一些其他错误,但我主要通过将self.calculatedarea(value);
移动到写入函数的底部来解决问题。