Chr*_*isS 13 javascript knockout.js
我在这里找到了类似的问题/答案:如何使用一些固定列和一些动态列来呈现表
但它并没有完全解决我的问题.我试图弄清楚如何将动态列的数量限制为每行5个,如果视图模型中有超过5个项目,请为数组中的所有5个组创建一个新行并重复.
例如:
var vm = {
item: { name: 'test1' },
item: { name: 'test2' },
item: { name: 'test3' },
item: { name: 'test4' },
item: { name: 'test5' },
item: { name: 'test6' }
};
Run Code Online (Sandbox Code Playgroud)
给那个模型,我怎么能得到这个表?
<table>
<tr>
<td>test1</td>
<td>test2</td>
<td>test3</td>
<td>test4</td>
<td>test5</td>
</tr>
<tr>
<td>test6</td>
<tr>
</table>
Run Code Online (Sandbox Code Playgroud)
RP *_*yer 24
为了处理这种情况,我可能会将逻辑推送到您的视图模型中,以便您的视图可以保持简单.因此,我们的想法是使用dependentObservable来表示您的"行".然后,您的视图可以遍历行,然后遍历行中的单元格.
下面是一个示例,它使该列数成为可观察列,以便可以动态更新. http://jsfiddle.net/rniemeyer/9TN9W/
var viewModel = {
items: ko.observableArray(),
columnLength: ko.observable(5)
};
//sample data
for (var i = 0; i < 100; i++) {
viewModel.items.push({ name: 'test' + i });
}
//return an array of rows. Each row is an array of items
viewModel.rows = ko.dependentObservable(function() {
var result = [],
colLength = parseInt(this.columnLength(), 10),
row;
//loop through items and push each item to a row array that gets pushed to the final result
for (var i = 0, j = this.items().length; i < j; i++) {
if (i % colLength === 0) {
if (row) {
result.push(row);
}
row = [];
}
row.push(this.items()[i]);
}
//push the final row
if (row) {
result.push(row);
}
return result;
}, viewModel);
Run Code Online (Sandbox Code Playgroud)