我正在尝试创建一个包含100行的表,但我不想使用push,因为每次推送都会呈现页面。该表应该首先为空,但是当我单击一个按钮时,该表将创建所有行。
这里的问题是,当我点击按钮时,我不会显示行。
但我只能设置 self.row = ko.observableArray()一次?
JS
RowModel = function(numbers) {
var self = this;
self.numbers = numbers;
}
TableViewModel = function() {
var self = this;
self.rows = null;
self.createRows = function() {
var arr = [];
var numbers = [];
for(var i=0; i < 100; i++){
for(var p=0; p < 4; p++){
numbers[p] = p;
}
arr[i] = new RowModel(numbers);
}
self.rows = ko.observableArray(arr);
}
};
ko.applyBindings(new TableViewModel());
HTML
<button data-bind="click: createRows">Create</button>
<table>
<tbody data-bind="foreach: rows">
<tr>
<td data-bind="text: numbers[0]"></td
<td data-bind="text: numbers[1]"></td>
<td data-bind="text: numbers[2]"></td>
<td data-bind="text: numbers[3]"></td>
</tr>
</tbody>
</table>
答案 0 :(得分:2)
始终在前面创建可观察对象,并使用带有数据的函数调用来设置数据,例如
self.rows = ko.observable([]);
然后使用以下方法设置数据(不是按照您的正确说法推送每个数据):
self.rows(arr);
完整的代码就在这个小提琴中:https://jsfiddle.net/brianlmerritt/y0x0wwy5/