我在尝试使用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);
}
}
任何想法为什么这不起作用?
结果
因此(显然)我仍然不熟悉Sharpout.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/