将来自Kendo Datasources的数据连接到新数组

时间:2017-02-09 15:27:43

标签: kendo-ui kendo-grid kendo-datasource jslinq

我正在尝试将选定的项目从2个网格连接到一个数组以进行进一步处理,但我不想影响任何数据源的任何更改,这证明是有问题的,因为第一个数据源似乎(之后) concat)包含我从第一个开始的项目...

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

JSLINQ中concat函数的源代码正在执行此操作...

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);
},

这导致我上面提到的重复问题。

所以看来我在这里遇到的错误与可观察数组有关,但我不知道如何从数据源中获取“detatched item”/“array”。

1 个答案:

答案 0 :(得分:0)

好吧事实证明,可观察数组上的toJSON()方法将可观察数组转换为数组(奇数命名,但嘿,这是剑道权利!)

简而言之,通过操纵我对JSLINQ方法的调用输入来包含它,然后我就会有正常的JS行为...

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