Добавьте несколько элементов, таких как массив, в существующий источник данных Kendo UI DataSource

Я работаю над этим несколько часов и не могу найти способ заставить его работать правильно. Я ищу правильный способ добавить содержимое массива в существующий источник данных пользовательского интерфейса Kendo. В основном у меня есть 4 списка SharePoint, и я извлекаю данные с помощью DataJS из каждого списка. Затем я хочу отобразить элементы в Kendo GridView, но я не хочу добавлять элементы с помощью оператора for и метода add(). Я пытался использовать метод add() непосредственно для массива, но все, что он делает, это добавляет массив как сам объект в DataSource и, конечно, это не предполагаемое поведение. Я также пытался использовать dataSource.data.concat(), но получил ошибку:

Объект не поддерживает свойство или метод concat


person Robert Kaucher    schedule 20.03.2013    source источник


Ответы (2)


Допустим, у вас есть новые данные в массиве с именем newData. Вы можете использовать:

var newData = [
    { ... },
    { ... },
    { ... }
];

$.merge(newData, datasource._pristine);
datasource.data(newData);
person OnaBai    schedule 20.03.2013
comment
Похоже, это не работает для меня, потому что мой источник данных представляет собой службу веб-API с отложенной загрузкой. Поэтому, когда я это делаю, источник данных еще не загружен, и я получаю только новые постоянные элементы, которые я пытался объединить. Я застрял или есть способ заставить это работать с помощью службы веб-API? - person catfood; 28.06.2013
comment
Будьте осторожны с порядком ваших $.merge() аргументов! если newData должно быть apожидаемым (не предшествующим), то это должен быть второй аргумент. Также в моей версии кендо свойство _pristineData, а не _pristine. Наконец, задав datasource.data(...) новые значения непосредственно с помощью .data(), вы отключите удаленную службу. Вместо этого я использовал schema: { data : function(){ } } для возврата данных, как если бы они уже были возвращены из удаленной службы merged - person The Red Pea; 09.02.2015

Приведенное выше решение не сработало для меня. Предложенный администратором Telerik метод ниже:

var vm = kendo.observable({
  data: new kendo.data.ObservableArray([])
});

vm.data.push.apply(vm.data, [ 1, 2, 3]);

Таким образом получается один рендер для привязанных виджетов. Найдено здесь: http://www.telerik.com/forums/passing-array-to-observablearray-push

person TheyCallMeSam    schedule 09.02.2016