Объединение данных из источников данных Kendo в новый массив
Я пытаюсь объединить выбранные элементы из 2 сеток в массив для дальнейшей обработки, но я не хочу влиять на какие-либо изменения в любом источнике данных, и это оказывается проблематичным, поскольку первый источник данных кажется (после concat) содержат предметы, которые я вытащил с первого раза...
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.data()", и я пытаюсь создать новый массив с элементами в "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);
},
Это приводит к дублированию проблемы, о которой я упоминал выше.
Таким образом, похоже, что ошибка, которую я здесь имею, связана с наблюдаемым массивом, но я не знаю, как получить "детализированный элемент" / "массив" из источника данных.
1 ответ
Итак, получается, что метод toJSON() в наблюдаемом массиве превращает наблюдаемый массив в массив (нечетное именование, но эй, это правильно!)
Короче говоря, манипулируя моим вводом вызова в метод JSLINQ, чтобы включить это, я получаю нормальное поведение JS, как и следовало ожидать...
var allItems = JSLINQ(grid1.data("kendoGrid").dataSource.data().toJSON())
.Concat(grid2.data("kendoGrid").dataSource.data().toJSON())
.ToArray();