在 Knockout 中更改可观察数组后刷新 UI

pla*_*tod 1 ko.observablearray knockout.js

我将其放入 html tbody data-bind="foreach: contact"
和 Knockout 视图模型中

var viewModel = function () {
    $this = this;
    $this.contacts = ko.observableArray();

$this.nextPage = function () {

        $.ajax({
            url: "/api/AddressBook",
            data: { pagesize: pageSize, currentpage: CPage },
            type: "GET"
        }).done(function (data) {

            var myKoObservableArray = $this.contacts; 

            myKoObservableArray.push(null);
            myKoObservableArray.push(data);

           alert(data[0].Name);

        });
}

$(document).ready(function () {
    $.ajax({
        url: "/api/AddressBook",
        data: { pagesize: 10,currentpage: 0 },
        type: "GET"
    }).done(function (data) {

        var vm = new viewModel();
        vm.contacts(data);
        ko.applyBindings(vm);
    });
});
Run Code Online (Sandbox Code Playgroud)

第一次加载页面时,表格是通过 $(document).ready 的 ajax 调用填充的。当我从 UI 调用 nextPage 时,我进行 ajax 调用并alert(data[0].Name) 显示返回的数据数组中的第一个元素。是每次从服务器返回的不同集合。问题是,在第二次(和下一次)ajax 调用更改“联系人”可观察数组后,我在 UI 中的表没有更改。

小智 5

是的,您可以为数组调用 valueHasMutated 函数:

yourArray.valueHasMutated();
Run Code Online (Sandbox Code Playgroud)

如果首先没有帮助,您可以进行“脏”刷新:

self.refresh = function(){
    var data = self.array().slice(0);
        self.array([]);
        self.array(data);
    };
Run Code Online (Sandbox Code Playgroud)

这是工作小提琴:http://jsfiddle.net/vyshniakov/FuEy6/2/