2017-02-09 5 views
0

Ich versuche, die ausgewählten Elemente aus 2 Grids in ein Array für die weitere Verarbeitung zu concaten, aber ich möchte keine Änderung in beiden Datenquellen beeinflussen, und dies beweist problematisch, da die erste Datenquelle ich von der ersten ziehen die Elemente (nach dem concat) enthalten scheint ...Verketten von Daten aus Kendo-Datenquellen in einem neuen Array

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

der Quellcode für die concat-Funktion in JSLINQ dies tut ...

Concat: function (array) { 
    var arr = array.items || array; 
    return new JSLINQ(this.items.concat(arr)); 
} 

this.items ist von dem, was ich den Wert von "grid1.data (" kendoGrid "). DataSource.dat sagen kann a() " und ich versuche ein neues Array mit den Elementen in" grid2.data ("kendoGrid"). dataSource.data() "zu erstellen, die ich dann basierend auf Auswahlkriterien filtern möchte.

hat irgendjemand irgendwelche Erfahrung mit diesem/a bedeutet zu sagen "Ich möchte eine Kopie des Datenelements von der Quelle, die nicht mit der Quelle verbunden ist"?

UPDATE: Die Basisfunktionalität beruht hier auf einem Standard-JS-Array, es scheint, dass Kendo ein beobachtbares Array-Objekt zurückgibt (spezifisch für Kendo und ohne die Concat-Funktion).

Die Umsetzung obigen Ergebnisse in einer Ausnahme auf der concat-Aufruf (weil es nicht vorhanden ist), so schrieb ich die Funktion so etwas wie ...

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

Das im doppelten Problem ergibt sich I oben erwähnt.

So scheint es, dass der Fehler, den ich hier habe, etwas mit beobachtbaren Array zu tun hat, aber ich weiß nicht, wie man ein "Detached Item"/"Array" aus der Datenquelle bekommen.

Antwort

0

Ok, damit es die toJSON() -Methode auf einer beobachtbaren Matrix verwandelt sich in einem Array die beobachtbare Array stellt sich heraus (ungerade Namensgebung, aber hey das ist Kendo rechts!)

Kurz gesagt, durch meinen Anruf Eingabe-Manipulations zum JSLINQ Methode, dies schließen ich normale JS Verhalten dann, wie ich erwarten würde ...

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

toJSON() als auch auf komplexere beobachtbaren Objekte funktioniert, alle Methoden und Ereignisse Abstreifen eine neue nicht zurückkehren - beobachtbares Objekt Eine andere Beispielverwendung ist das Klonen eines Observablen durch Aufrufen von jSON() und das Zuführen des Ergebnisses in den Konstruktor eines neuen Objekts. – NigelK

Verwandte Themen