【问题标题】:Concatenating data from Kendo Datasources in to a new array将来自 Kendo 数据源的数据连接到一个新数组中
【发布时间】:2017-02-09 15:27:42
【问题描述】:

我正在尝试将 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);
},

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

所以看来我这里的错误与可观察数组有关,但我不知道如何从数据源中获取“分离项”/“数组”。

【问题讨论】:

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


    【解决方案1】:

    好的,结果是可观察数组上的 toJSON() 方法将可观察数组转换为数组(奇怪的命名,但嘿,这是剑道吧!)

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

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

    【讨论】:

    • toJSON() 也适用于更复杂的可观察对象,剥离所有方法和事件以返回一个新的不可观察对象。另一个示例用法是通过调用 toJSON() 克隆 observable 并将结果输入新的构造函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    相关资源
    最近更新 更多