我有这样简单的数据:
var dataFromAjax = [
{Id : 1, Name : "Yoza", Status : 1},
{Id : 2, Name : "Dhika", Status : 1}
];
来自ajax的下一个数据将具有不同的架构。像这样:
var nextData = [
{Id : 1, Name : 'Yoza', Job : 'Programmer', Phone : '08788'},
{Id : 1, Name : 'Dhika', Job : 'Designer', Phone : '99987922'}
]
在我的代码中:
self.Data = ko.observableArray();
self.Data(nextData);
self.Data.valueHasMutated();
问题是列未更新。列仍然与第一个模式相同,即id,name和status。作业和电话未呈现。如何呈现不同的架构?
答案 0 :(得分:0)
您需要将observableArray columnDefs传递给koGrid绑定才能进行更改。查看他们的文档here。
像:
HTML绑定:
<div data-bind="koGrid: {data: Data, columnDefs: columns}"></div>
Viewmodel(仅限部分):
self.columns = ko.computed(function(){
var cols = Object.keys(self.Data()[0]);
return cols.map(function(col){
return {
field: col
};
});
});
只要返回带有columns
对象的对象数组,您就可以定义创建field
的方式。 (有关详细信息,请参阅上面的文档)
我创建了一个缩小的小提琴here,以根据您的数据提供一些示例。数据将在1秒后改变(这仅用于测试)。