淘汰赛observableArray不更新(Knockout observableArray not

2019-08-31 09:56发布

我不会在HTML更新,即使我可以登录到控制台,看看它改变observableArray。 我希望的jsfiddle有一个控制台,这样我可以表明部分。

在这个例子中我贴我的人的名单,然后我搜索跨列表,并尝试将结果添加到新observableArray。 搜索结果observableArray从来没有更新的HTML。

这是我的jsfiddle: http://jsfiddle.net/hMmgV/1/

这里是我的代码:

function AppViewModel() {
    var self = this;

    self.people = ko.observableArray([{
        fName: "Thomas",
        lName: "Edison"
    }, {
        fName: "Sally",
        lName: "Salputrio"
    }, {
        fName: "Edward",
        lName: "Sparkleshine"
    }, {
        fName: "Jacob",
        lName: "Wolfsson"
    }]);
    self.searchResult = ko.observableArray([]);
    self.searchFieldKo = ko.observable("");

    self.submitSearch = function () {
        if (self.searchFieldKo() != "") {
            self.searchResult().length = 0;
            $.each(self.people(), function (pKey, pObj) {
                $.each(pObj, function (pProp, pValue) {
                    if (pValue.toString().toLowerCase().indexOf(self.searchFieldKo().toLowerCase()) >= 0) {
                        self.searchResult().push(self.people()[pKey]);
                        console.log(self.searchResult());
                    }
                })
            })
        } else {
            alert("Please type something.");
        }
    }
}

ko.applyBindings(new AppViewModel());

Answer 1:

你有括号中的不必要的集

self.searchResult().push(self.people()[pKey]); 

它应该是

self.searchResult.push(self.people()[pKey]);

演示的jsfiddle。

因为当你写self.searchResult()你正在访问在可观察的垫层阵列。 而当你推入数组KO不会被有关更改的,所以你需要使用的通知push方法上observableArray本身。

顺便说淘汰赛有一个伟大的一套有用的阵列助手可能简化你的过滤逻辑。



文章来源: Knockout observableArray not updating
标签: knockout.js