我在尝试使用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/

10-12 00:20
查看更多