我正在使用这个名为Dragula的插件,它需要一个ObservableArray作为数据源。
HTML /敲除绑定
{{1}}
淘汰赛代码:
{{1}}
问题是......我在顶级节点上有一个ObservableArray,而且我确实需要在层次结构中向下进一步使用ObservableArrays。
model.availablePlayers 工作正常,但是当通过teamsetup访问html / ko foreach循环中的其他玩家时 - >子团队 - >由于玩家而无法使用的玩家不是ObservableArray。 (可能每1到7个子团队都有玩家)。
那么如何让每个子团队中的玩家成为ObservableArray?
查看数据结构的图像:
答案 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">