Javascript 敲除装置不工作

Javascript 敲除装置不工作,javascript,knockout.js,Javascript,Knockout.js,我在用敲除法处理地址时真是太可笑了。我的结构类似于: viewModel.buildings()[0].Address()... 地址为: var Address = function () { var self = this; self.cAddr1 = ko.observable(""); self.cCity = ko.observable(""); ... self.cDisplay = k

我在用敲除法处理地址时真是太可笑了。我的结构类似于:

    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();
    }
你知道为什么这样不行吗

结果 所以我对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);
});

您可以为每个变量添加订阅,您需要一个事件

它看起来像是在寻找
subscribe
而不是
computed

self.cAddr1.subscribe(function(){
    self.AddressActions.VerifyAddress(self);
});

您可以为每个变量添加订阅,您需要为其添加事件。

pure computed的淘汰文档特别指出,当您打算执行某些操作时,不要使用它()

您不应该将纯功能用于计算的可观察对象,该对象意味着在其依赖项发生变化时执行操作

您可以使用常规的计算方法

self.triggerAddressVerify = ko.computed(function () {
    console.log('here');
    self.cAddr1(); self.cAddr2(); self.cCity(); self.cState(); self.cZip();
    self.AddressActions.VerifyAddress(self);
});

但请注意,这将在最初运行一次,并在将来的更改中运行。如果您只想对将来的更改执行操作,那么订阅纯计算的方法会更好。

纯计算的淘汰文档特别指出,当您打算执行某些操作时,不要使用它()

您不应该将纯功能用于计算的可观察对象,该对象意味着在其依赖项发生变化时执行操作

您可以使用常规的计算方法

self.triggerAddressVerify = ko.computed(function () {
    console.log('here');
    self.cAddr1(); self.cAddr2(); self.cCity(); self.cState(); self.cZip();
    self.AddressActions.VerifyAddress(self);
});

但请注意,这将在最初运行一次,并在将来的更改中运行。如果您只想对将来的更改执行操作,那么订阅纯计算的方法会更好。

纯计算只有在订阅者监听时才会执行。这可能意味着使用它的另一个computed,也可能意味着html中的绑定。pureComputed只有在有订阅者侦听时才会执行。这可能意味着使用它的另一个计算机或html中的绑定。