在没有事件触发的情况下替换Kendo ObservableArray的内容

时间:2014-11-10 23:08:29

标签: javascript kendo-ui kendo-grid

我有一个带有ObservableArray数据的KendoUI网格。

var aKendoObservableArray = new kendo.data.ObservableArray([ .....]);

// defining the grid ....
dataSource: {
                data: aKendoObservableArray,
                pageSize: 10,
                schema: {
                    model: {
                        id: "_jobInstanceId" // the identifier of the model
                    }
                }
            },

我想从服务器获取新数据后替换此数组的内容。我已经尝试拼接数组以清除它并逐个添加新内容。这导致了巨大的性能下降,因为剑道试图确定每个添加如何分页网格。有没有一种方法可以替换Kendo UI ObservableArray的内容,只更改事件一次?

2 个答案:

答案 0 :(得分:2)

KendoUI论坛回答了这个问题。我们需要清理数组(触发一个remove事件)并立即推送所有元素(触发一个add事件)

http://www.telerik.com/forums/passing-array-to-observablearray-push

因此,我需要的是

// clean the array
aKendoObservableArray.splice(0, aKendoObservableArray.length);
aKendoObservableArray.push.apply(aKendoObservableArray, [{...},{...},{...},{...},{...}];

答案 1 :(得分:0)

最终,这是删除项目所必须做的事情:

var idToRemove = $(this).parent().attr('data-id');

// remove all items that do not share the ID the user is trying to delete
for (var i = 0; i < e.model.MyArrayOfItems.length; i++) {
    if (e.model.MyArrayOfItems[i].idToMatch == idToRemove)
        e.model.MyArrayOfItems.splice(i, 1);
}