创建一个包含许多行的表,而无需推入Knockout js

时间:2016-05-05 07:47:22

标签: javascript knockout.js

我正在尝试创建一个包含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>

1 个答案:

答案 0 :(得分:2)

始终在前面创建可观察对象,并使用带有数据的函数调用来设置数据,例如

self.rows = ko.observable([]);

然后使用以下方法设置数据(不是按照您的正确说法推送每个数据):

self.rows(arr);

完整的代码就在这个小提琴中:https://jsfiddle.net/brianlmerritt/y0x0wwy5/