我在尝试使用 Knockout 处理地址时遇到了荒谬的时间。我的结构是这样的:
viewModel.buildings()[0].Address()...
地址是:
var Address = function () {
var self = this;
self.cAddr1 = ko.observable("");
self.cCity = ko.observable("");
...
self.cDisplay = ko.pureComputed(function () {
return self.cAddr1() + '<br>' + self.cCity() + ...;
}
self.AddressActions = new AddressActions();
}
一切似乎都正常。每个建筑物都有一个地址,并且可观察到的数据会正确更新。 cDisplay 也能正常工作。
我想添加另一个计算的/可观察的/任何东西,本地址改变时,它将调用一个函数,该函数是 AddressActions 的一部分。我试过了,但是 console.log 从来没有被击中,这对我来说没有任何意义:
var Address = function () {
// Same as above...
...
self.triggerAddressVerify = ko.pureComputed(function () {
console.log('here');
self.cAddr1(); self.cAddr2(); self.cCity(); self.cState(); self.cZip();
self.AddressActions.VerifyAddress(self);
}
}
知道为什么这不起作用吗?
结果 所以我仍然是 knockout.js 的新手(很明显),但它的工作方式与我想象的有点不同。我基本上使用了公认的答案,但将所有内容都包装到一个 pureComputed.这是我最后添加的内容:
var Address = function () {
...
self.addressChangeEvent = ko.pureComputed(function () {
return self.cAddr1() + self.cAddr2() + self.cCity() self.cState() + self.cZip();
}
self.addressChangeEvent.subscribe(function () {
self.AddressActions.VerifyAddress(self);
}
}
最佳答案
看起来您正在寻找 subscribe
而不是 computed
self.cAddr1.subscribe(function(){
self.AddressActions.VerifyAddress(self);
});
您可以为每个需要事件的变量添加订阅
关于javascript - knockout pureComputed 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42863641/