首页 > 解决方案 > 当子数组更新 UI 在淘汰赛 js 中不刷新

问题描述

我正在研究淘汰赛js。我有一个可观察的数组对象,例如

视图模型(){

self.myObservableArray = ko.observableArray();


}

在一些 asyc api 调用之后,我会像这样更新数组

self.myObservableArray().push({
    "name" : "Some name",
    "childArray" : []
});

在第二次 aync api 调用之后,我将不得不遍历响应并在每个循环中将一个项目推送到 childArray 中。

self.myObservableArray()[0]. childArray.push({
        "childName" : "name " + $index
    })

但是当我更新二级数组时,UI 不会刷新。添加元素以便刷新 UI 的正确方法是什么,或者至少有一种方法可以触发表示父属性已更改的事件。

标签: javascriptarraysknockout.js

解决方案


如果您希望在childArray更改时更新 UI,那么它也需要是一个observableArray。我还猜想你也需要制作name一个可观察的,所以将它们都绑定在一个单独的视图模型中可能是个好主意,例如:

var childViewModel = function (name, items) {
   var self = this;
   self.name = ko.observable(name);
   self.childArray = ko.observableArray(items);
}

self.myObservableArray.push(new childViewMode("Some name", []));

推荐阅读