当数据发生变化时,kogrid不会更新列

时间:2016-02-19 17:39:50

标签: knockout.js kogrid

我有这样简单的数据:

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。作业和电话未呈现。如何呈现不同的架构?

1 个答案:

答案 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秒后改变(这仅用于测试)。