2 Stimmen

Wie erhalte ich in einem ExtJS-Grid Zugriff auf die Datenspeicherfelder, die Teil des Sortiersatzes sind?

Wie erhalte ich Zugriff auf die Spalten/Datenspeicherfelder, die Teil des Sortiersatzes sind?

Ich möchte die Sortierparameter eines Rasters für die Fernsortierung ändern. Ich brauche den Sortierschlüssel des Fernsortierparameters, um mit der Zuordnungseigenschaft des Spaltenfeldes übereinzustimmen. Ich brauche diese Dinge zu passieren, obwohl die normale "Spaltenkopf Klick sortiert die Daten" Funktionalität.

2voto

Fernsortierung und Feldzuordnung (ExtJS 4.1)

Diese Funktionalität scheint in ExtJS nicht implementiert zu sein. Hier ist eine Lösung unter Verwendung der encodeSorters Funktion, die seit ExtJS 4 zur Verfügung steht. Der Zugriff auf die Feldzuordnung über den Prototyp des Modells ist ein wenig unsauber, aber er erfüllt seinen Zweck:

var store = Ext.create('Ext.data.Store', {
    ...,
    proxy: {
        ...,
        encodeSorters: function (sorters) {
            var model = store.proxy.model,
                map = model.prototype.fields.map;
            return Ext.encode(Ext.Array.map(sorters, function (sorter) {
                return {
                    property : map[sorter.property].mapping || sorter.property,
                    direction: sorter.direction
                };
            }));
        }
    }
});

Es wäre jedoch sinnvoller, die ursprüngliche Methode :

Ext.data.proxy.Server.override({
    encodeSorters: function(sorters) {
        var min, map = this.model.prototype.fields.map;
        min = Ext.Array.map(sorters, function (sorter) {
            return {
                property : map[sorter.property].mapping || sorter.property,
                direction: sorter.direction
            };
        });
        return this.applyEncoding(min);
    }
});

0voto

ssinganamalla Punkte 1240

Angenommen, Sie verwenden simpleSortMode, dann könnten Sie so etwas in Ihrem Geschäft machen.

listeners: {
        beforeload: function( store, operation, eOpts ) {
            if (store.sorters.length > 0) {

                var sorter = store.sorters.getAt(0),
                dir = sorter.direction,
                prop = sorter.property,
                fields = store.model.getFields(),
                i,
                applyProp = prop;

                for (i = 0; i < fields.length; i++) {
                    if (fields[i].name == prop) {
                        applyProp = fields[i].mapping || prop;
                        break;
                    }
                } 

                //clearing the sorters since the simpleSortMode is true so there will be only one sorter
                store.sorters.clear();
                store.sorters.insert(0, applyProp, new Ext.util.Sorter({
                     property : applyProp,
                     direction: dir
                 }));
            }

        }

    },

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X