我一直在寻找嵌套foreach
循环的例子在knockout
整个下午,我一直没有能够得到任何工作。我目前的设置,至少是相关的部分,如下。knockout.js嵌套foreach上嵌套数组
视图模型:
var sample = {
this.pageData = ko.observable();
this.panels = ko.observableArray();
};
ko.utils.extend(sample.prototype, {
activate: {
this.pageData(sampleData);
this.panels([
{
name: 'column1',
keys: ['key1', 'key2', 'key3'],
loadedWidgets: ko.observableArray()
},
{
name: 'column2',
keys: ['key4', 'key5'],
loadedWidgets: ko.observableArray()
},
{
name: 'column3',
keys: ['key6'],
loadedWidgets: ko.observableArray()
}
]);
this.loadWidgetPanels(this.panels(), this.pageData());
},
loadWidgetPanels: function (panels, pageData) {
for (var i = 0; i < panels.length; i++) {
var screens = filterContentByKey(pageData.Content, panels[i].keys);
if (screens) {
panels[i].loadedWidgets.push(widgetFactory.getWidgets(screens));
}
}
}
}
查看:
<div>
<!-- ko foreach: panels -->
<div class="3columnStyle">
<!-- ko foreach: loadedWidgets -->
<!--ko compose: $data --><!-- /ko -->
<!-- /ko -->
</div>
<!-- /ko -->
</div>
我证实,我又回到正确的格式正确的数据在我loadedWidgets
,但他们不在视图中显示。我可以告诉该视图至少知道有多少数据,因为我的DOM对每个小部件都有一个ko compose
元素。例如,第一列有少量小部件,并且该小部件是用一些小部件创建的。第2列有2个小工具,它有2个compose
元素。第3列有1个小部件并获取一个元素。它只是不显示小部件本身。我是否需要额外的元素或附加的绑定?
我有一个不依赖于嵌套循环的工作模型。它不是使用对象数组,而是创建每个可观察数组。换句话说,它不是循环的。相反,包含三个对象,每个都有自己的阵列一个阵列中,我有三个数组:
this.column1Widgets();
this.column2Widgets();
this.column3Widgets();
他们的构造相同的方式,只是改为手动循环。和视图看上去更像是这样的:
<div class="3columnStyle">
<!-- ko foreach: column3Widgets -->
<!-- ko compose: $data --><!-- /ko -->
<!-- /ko -->
</div>
<div class="3columnStyle">
<!-- ko foreach: column3Widgets -->
<!-- ko compose: $data --><!-- /ko -->
<!-- /ko -->
</div>
<div class="3columnStyle">
<!-- ko foreach: column3Widgets -->
<!-- ko compose: $data --><!-- /ko -->
<!-- /ko -->
</div>
我不知道为什么它不与嵌套循环工作,但由于该数据是相同的,我敢肯定有我丢失的东西在设立视图。
你可以让一个jsfiddle,jsbin或plunker显示你的问题?这会帮助你更容易。 –
您是否尝试过使用非无容器绑定(即将'foreach'绑定到div中)?我会这样做,然后使用chrome的knockout上下文调试器来查看是否有什么好玩的事情发生...... – gerrod