在开发过程中,一个需求是后台传输table数据,分为header和data两部分,header代表表头,data是json对象,代表每个字段的具体值。table是个json数组。
问题是:header代表的表头列数不定,data代表的行数也不定,要实现向表格添加数据。
解决方案:
html代码:
<table>
<thead>
<tr data-bind="foreach:Header">
<th data-bind="text:header"></th>
</tr>
</thead>
<tbody data-bind="foreach:{data:Order, as:'order'}">
<tr data-bind="foreach:{data:order.items,as:'item'}">
<td data-bind="text:item.it"></td>
</tr>
</tbody>
</table>
js代码:
var viewModel={
Header:ko.observableArray([]),
Order:ko.observableArray([])
};
ko.applyBindings(viewModel);
//Header正常push就好
$.each(Order, function(k,v){
var value =v;
var items=[];
$.each(value, function(key, val){
items.push({
it:val
});
});
viewModel.Order.push({
item:items,
//textColor等其他参数
});
});
主要思想就是,讲item初始化为数组,然后再放入Order中,而不是一开始就在Order中。