2017-02-09 67 views
0

我試圖從2個網格中選擇的項目連接到數組進行進一步處理,但我不想影響任何數據源中的任何更改,這是證明問題的,因爲第一個數據源似乎(在CONCAT後),包含我從第一個下拉的項目...將來自Kendo Datasources的數據連接到一個新陣列

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.dat a()「 ,我試圖用」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」。

回答

0

確定,所以它原來可觀察到的陣列上的的toJSON()方法變爲可觀察到的陣列中的陣列(奇數命名,但嘿這是劍術右!)

總之,通過操縱我的呼叫輸入到JSLINQ方法包括這個話,我有正常的JS行爲,我希望......

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

的toJSON()的工作更復雜的觀察對象以及,剝離了所有的方法和事件返回一個新的非 - 可觀察物體。另一個示例用法是通過調用toJSON()來克隆一個observable,並將結果提供給一個新的構造函數。 – NigelK

相關問題