Объединение данных из источников данных 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();
Другие вопросы по тегам