2016-04-13 6 views
2

Ich arbeite an meinem ersten Ext JS Projekt und habe meine Quelldaten von einem Webserver in einem Geschäft heruntergeladen. Jetzt möchte ich, dass verschiedene Raster alle Variationen dieser Quelldaten zeigen. Zum Beispiel wäre Gitter 1 die Quellendaten, die nach einer bestimmten Spalte gruppiert sind. Grid 2 würde nach einer bestimmten Spalte gruppiert werden, wobei Spalte X = 'Variable' wäre. Also weiter und so weiter.ext js Speicher, Manipulation von Daten (linq Typ Abfragen)

Ich komme aus einem C# Hintergrund arbeiten in WPF. Normalerweise verwende ich beobachtbare Sammlungen und führe LINQ auf der beobachtbaren Sammlung aus, um eine neue beobachtbare Sammlung zu bilden, und binde diese neue Sammlung dann an mein Raster.

Meine Frage ist, wie kann ich Abfragen vom Typ LINQ in Filialen in EXT JS ausführen?

Antwort

2

Sie können Abfragen vom Typ LINQ in Geschäften in ExtJS ausführen: Sie können problemlos Collection aus einem Geschäft mit der Methode query oder queryBy abrufen.

Aber Sie können nicht so für Ihre Grids arbeiten, weil Grids nicht nur auf Sammlungen laufen können, sie brauchen jeweils ein Geschäft. Sie möchten keine LINQ-Abfragen für diese Speicher verwenden. Wenn Sie ExtJS6 verwenden, können Sie unter ChainedStore nachsehen. Sie können jedes Raster an einen ChainedStore binden, in dem sich Ihr Datenspeicher befindet. Jeder ChainedStore kann unabhängig von der Quelle und von anderen Filialen gefiltert, sortiert und gruppiert werden, indem die Funktionen sort(), group() und addFilter() im jeweiligen Geschäft verwendet werden.

Wenn Sie eine frühere Version verwenden, müssen Sie mehrere Speicher verwenden und alle Daten manuell aus dem Hauptspeicher kopieren. Bitte beachten Sie, dass store.add() ein Array von Datensätzen und keine Sammlung verwendet. Verwenden Sie anstelle von store.add(collection)store.add(collection.getRange()). Die getRange() Funktion wird ein Array zurückgeben, das alle Elemente in der Auflistung enthält.

Um Ihre Frage aus dem Kommentar zu antworten: was, wenn ich etwas so einfach tun müssen, einen neuen Speicher wie erstellen, aus store1, Gruppe alles von column1 und Summe column2?

In ExtJS6, wenn Sie die Gruppierung und die Summe in einem Raster angezeigt werden soll, dass etwas zusammen sein würde:

var store2 = Ext.create('Ext.data.ChainedStore',{ 
    source:store1, // use the data from the other store. 
    grouper:{ 
     property:'someTestField' // grouping is done inside this store. 
    } 
}); 

Ext.create('Ext.grid.Panel',{ 
    store:store2, 
    features:[{ 
     ftype:'groupingsummary' // a summary row for each group is provided by this 
    }], 
    columns:[{ 
     xtype:'numbercolumn' 
     dataIndex: 'someTestField' 
     summaryType: 'sum' // this column should have the sum in the summary row. 
    }] 
}) 

Ungeprüfte und ohne Gewähr. Wenn Sie es ohne das Gitter tun möchten, berechnen Sie einfach die Summe, die würde manuell so gemacht werden müssen:

+0

Ich habe nichts dagegen, ein eigenes Geschäft für jedes Gitter zu haben. Ich versuche nur den besten Weg (BEST PRACTICES) zu finden, was ich versuche. also im Grunde, was, wenn ich etwas tun muss so einfach wie ein neues Geschäft zu erstellen, aus store1, gruppieren Sie alles nach Spalte1 und Summe Spalte2? – solarissf

+0

danke für die Proben ... also von dem, was ich sagen kann, wird das alles mit Zusammenfassung Zeilen gruppieren. Ich möchte jedoch nur die Zusammenfassungszeile anzeigen, nicht die tatsächlichen Elemente, die gruppiert werden. Würde es Ihnen etwas ausmachen, mir das auch zu zeigen? – solarissf

+0

Dies würde bedeuten, dass Sie die Zusammenfassungszeilen generieren und den Speicher manuell füllen. Oder Sie werfen einen Blick auf das "Pivot Grid". Es erfordert eine Sencha-Premium-Lizenz, obwohl ... – Alexander