Knockout.js:ObservableArray里面有ObservableArrays吗?

时间:2016-03-30 00:23:38

标签: javascript knockout.js

我正在使用这个名为Dragula的插件,它需要一个ObservableArray作为数据源。

HTML /敲除绑定

{{1}}

淘汰赛代码:

{{1}}

问题是......我在顶级节点上有一个ObservableArray,而且我确实需要在层次结构中向下进一步使用ObservableArrays。

model.availablePlayers 工作正常,但是当通过teamsetup访问html / ko foreach循环中的其他玩家时 - >子团队 - >由于玩家而无法使用的玩家不是ObservableArray。 (可能每1到7个子团队都有玩家)。

那么如何让每个子团队中的玩家成为ObservableArray?

查看数据结构的图像:

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用Mapping插件,但如果玩家是您唯一需要的东西,您可以手动执行:

简化您的视图模型:

var TeamSetupViewModel = function () {
    var self = this;
    self.availablePlayers = ko.observableArray();
    self.subTeams = ko.observableArray();
}

从服务器获取数据后,填充视图模型,将每个团队中的玩家阵列转换为可观察的一系列玩家:

$.get(uri,
    function (data) {
        model.availablePlayers(data.AvailablePlayers);
        model.subTeams(data.SubTeams.map(function(t) { t.Players = ko.observableArray(t.Players); return t; }));
    }, 'json');
});

最后,删除模板中的以下行(带有结束标记) - 不再迭代任何内容:

<div data-bind="foreach: teamsetup">

...并在下一行更新属性的名称,因此它就像VM中的驼峰一样:

<div data-bind="foreach: subTeams">