2017-04-19 1 views
1

Ich habe einen Proxy-Speicher, der auf zwei verschiedene Arten gefüllt wird - entweder über loadData oder über load.Ereignis, das ausgelöst wird, sobald der Speicher Daten enthält

Ich habe bestimmte Aktionen, die stattfinden sollten, sobald der Laden gefüllt ist; nämlich sollte ein bestimmter Datensatz gesucht und ausgewählt werden:

preselectByName:function(name, groupName) { 
    var store = this; 
    if(store.preselected) return; 
    store.preselected = true; 
    store.on('load',function() { 
     store.selectByName(name, groupName); 
     store.preselected = false; 
    },store,{single:true}); 
} 

wie folgt aufgerufen:

if(store.isLoaded) store.selectByName(name, groupName); 
else store.preselectByName(name, groupName); 

Dieser Code funktioniert gut, wenn der Speicher über load füllt, aber nicht über loadData.

  • Gibt es ein anderes Ereignis, das von beiden load und loadRecord gebrannt wird?
  • Wie sonst würde ich einen Listener implementieren, der auf eines der beiden Ereignisse feuert, je nachdem, was zuerst eintritt?

Antwort

1

Die Last Ereignis ist speziell zum Lesen von Daten aus einer entfernten Datenquelle. Das Geschäft kann erweitert werden, um ein Ereignis einzuführen, das Ihren Anforderungen entspricht.

/* 
    @event loadrecords Fires whenever records a loaded into the store. 
     @param {Ext.data.Model[]} records An array of records 
*/ 
Ext.define('MyApp.data.Store', { 
    extend: 'Ext.data.Store', 

    load: function() { 
     this.callParent(arguments); 
     this.fireLoadRecords(); 
     return this; 
    }, 

    fireLoadRecords: function() { 
     this.fireEvent('loadrecords', this.getRange()); 
    }, 

    loadRecords: function(records, options) { 
     this.callParent(arguments); 
     this.fireLoadRecords(); 
    } 
}); 

http://docs.sencha.com/extjs/6.2.0/classic/Ext.data.ProxyStore.html#event-load

1

ist ein Ereignis, das Feuer von beiden load und loadRecord, aber vorsichtig sein, es von jedem Wechsel ausgelöst, die zu dem Datensatz gemacht.

Übrigens: ich dies in der Regel verwenden, um das Ereignis zu finden, die ich in ExtJs brauchen:

Ext.util.Observable.capture(myObj, function(evname) {console.log(evname, arguments);}) 

er alle Ereignisse ExtJs erfasst, abgefeuert durch die myObj Komponente und meldet sie an die Konsole.

  • Oder Sie könnten ein benutzerdefiniertes Ereignis erstellen, die Sie manuell auf load Feuer und nach loadData, wie:

store.on ("load", function() {store.fireEvent ("myload")})

und

store.loadData (...)

store.fireEvent ("myload")

dann

store.on ("myload", Funktion() {...})

+0

Ja, kann es zu oft ein Problem, dass 'datachanged' Feuer sein.Ich werde es mir ansehen; Aber da die Datensätze im Laden in Formularen bearbeitet werden können und ich nur auf 'load' oder' loadData' feuern möchte, bin ich mir nicht sicher, ob das der richtige Weg ist. – Alexander

+0

Vielleicht könnten Sie etwas versuchen: Statt 'loadData()' könnten Sie versuchen, den Proxy in einen 'Speicherproxy' zu ändern, die 'data' Eigenschaft auf die benötigten Daten zu setzen, dann' load() 'und schließlich in Das 'load event' ändert den Proxy in das Original zurück. Ich habe das nicht getestet, nur eine Idee. Vielleicht ein bisschen ratlos. –

Verwandte Themen