2017-02-09 13 views
0

Я пытаюсь выполнить выделенные элементы из 2 сеток в массив для дальнейшей обработки, но я не хочу влиять на какое-либо изменение в любом источнике данных, и это доказывает проблематичным, поскольку первый источник данных, кажется (после CONCAT) содержат элементы, я достаю из первых ...Объединение данных из источников данных Kendo в новый массив

var allItems = JSLINQ(grid1.data("kendoGrid").dataSource.data()) 
    .Concat(grid2.data("kendoGrid").dataSource.data()) 
    .ToArray(); 

исходный код для функции Concat в JSLINQ делает это ...

Concat: function (array) { 
    var arr = array.items || array; 
    return new JSLINQ(this.items.concat(arr)); 
} 

this.items - это то, что я могу сказать значение «grid1.data (« kendoGrid »). DataSource.dat a() " , и я пытаюсь построить новый массив с элементами в" grid2.data ("kendoGrid"). dataSource.data() ", который затем я намерен фильтровать на основе критериев выбора.

есть ли у кого-нибудь опыт работы с этим/а значит сказать: «Я хочу, чтобы копия элемента данных из источника, который не подключен к источнику»?

ОБНОВЛЕНИЕ: Базовая функциональность здесь основана на наличии стандартного массива JS, кажется, что kendo возвращает наблюдаемый объект массива (специфичный для kendo и отсутствующий функция concat).

Реализация выше результатов в виде исключения на Concat вызова (потому что он не существует), поэтому я переписал функцию, чтобы что-то вроде этого ...

Concat: function (array) { 
    //var arr = array.items || array; 
    //return new JSLINQ(this.items.concat(arr)); 

    var retVal = new Array(); 
    for (var i = 0; i < this.items.length; i++) { 
     var clone = JSON.parse(JSON.stringify(this.items[i])); 
     retVal.push(clone); 
    } 
    for (var i = 0; i < array.length; i++) { 
     var clone = JSON.parse(JSON.stringify(array[i])); 
     this.items.push(clone); 
    } 

    return new JSLINQ(retVal); 
}, 

Это приводит к дубликата проблемы я упомянутое выше.

Так что кажется, что ошибка, которую я здесь имею, имеет отношение к наблюдаемому массиву, но я не знаю, как получить «отредактированный элемент»/«массив» из источника данных.

ответ

0

Ok так получается метод toJSON() на наблюдаемом массиве получается наблюдаемый массив в массив, (нечетные имена, но эй этого кэндо правильно!)

Короче говоря, манипулируя мой вход вызова методу JSLINQ включить это, то у меня есть нормальное поведение JS, как я ожидал ...

var allItems = JSLINQ(grid1.data("kendoGrid").dataSource.data().toJSON()) 
    .Concat(grid2.data("kendoGrid").dataSource.data().toJSON()) 
    .ToArray(); 
+0

toJSON() работает на более сложных наблюдаемых объектов, а также, вырезают все методы и события, чтобы вернуть новый не -обслуживаемый объект. Другим примером использования является клонирование наблюдаемого путем вызова функцииJSON() и подачи результата в конструктор нового. – NigelK