将 Kendo 个数据源中的数据连接到一个新数组中
Concatenating data from Kendo Datasources in to a new array
我正在尝试将 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()" 中的项目构建一个新数组,然后我打算根据选择条件对其进行过滤。
有没有人有这方面的经验/有办法说 "I want a copy of the data item from the source that's not connected to the source"?
更新:
这里的基本功能依赖于一个标准的 JS 数组,似乎 kendo returns 一个可观察的数组对象(特定于 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"。
好的,事实证明可观察数组上的 toJSON() 方法将可观察数组转换为数组(奇怪的命名,但嘿,这是 kendo 正确的!)
简而言之,通过操纵我对 JSLINQ 方法的调用输入以包含此方法,然后我就会像我期望的那样拥有正常的 JS 行为...
var allItems = JSLINQ(grid1.data("kendoGrid").dataSource.data().toJSON())
.Concat(grid2.data("kendoGrid").dataSource.data().toJSON())
.ToArray();
我正在尝试将 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()" 中的项目构建一个新数组,然后我打算根据选择条件对其进行过滤。
有没有人有这方面的经验/有办法说 "I want a copy of the data item from the source that's not connected to the source"?
更新: 这里的基本功能依赖于一个标准的 JS 数组,似乎 kendo returns 一个可观察的数组对象(特定于 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"。
好的,事实证明可观察数组上的 toJSON() 方法将可观察数组转换为数组(奇怪的命名,但嘿,这是 kendo 正确的!)
简而言之,通过操纵我对 JSLINQ 方法的调用输入以包含此方法,然后我就会像我期望的那样拥有正常的 JS 行为...
var allItems = JSLINQ(grid1.data("kendoGrid").dataSource.data().toJSON())
.Concat(grid2.data("kendoGrid").dataSource.data().toJSON())
.ToArray();