In che modo devo attendere il caricamento di più negozi? Ho un caso in cui ho bisogno di fare un po 'di lavoro solo quando vengono caricati due diversi negozi, quindi usare lo store.on("load", fn)
di un negozio non è abbastanza buono.ExtJS in attesa del caricamento di più negozi
risposta
Penso che si possa aggiungere listener di carico per entrambi i negozi, e verificare se l'altro finito ...
this.getStore('store1').on('load',function(store){
if (this.getStore('store2').isLoading() == false){
// callMethod to perform action ....
}
},this);
this.getStore('store2').on('load',function(store){
if (this.getStore('store1').isLoading() == false){
// callMethod to perform action....
}
},this);
penso che questo modo si chiamerà il metodo solo quando sono entrambi caricati partendo dal presupposto che si sapere che la richiesta di carico è stata fatta per entrambi.
Ho avuto alcuni progetti che richiedevano il caricamento di diversi negozi prima di lavorare con i dati. Ho aggiunto un callback su di loro per verificare se ogni elemento nel Ext.data.StoreManager
è stato caricato e in tal caso avrebbe fatto ciò che mi serviva con i dati.
Per aggiungere negozi per la StoreManager devi solo dargli un storeId
nella sua configurazione, qualcosa di simile:
var store1 = Ext.create('Ext.data.Store', {
model: myModel,
storeId: 'store1', //<-- adds this to Ext.data.StoreManager
proxy: {
type: 'ajax',
url: 'url...',
reader: 'json'
},
autoLoad: {
callback: initData
}
});
var store2 = Ext.create('Ext.data.Store', {
model: myModel,
storeId: 'store2',
proxy: {
type: 'ajax',
url: 'url...',
reader: 'json'
},
autoLoad: {
callback: initData
}
});
// Initialize store dependencies when all stores are loaded
function initData() {
var loaded;
Ext.data.StoreManager.each(function(store) {
loaded = !store.isLoading();
return loaded;
});
if(loaded) {
// do stuff with the data
}
}
Not certo, ma penso che il downvote fosse dovuto a 'loaded =! store.isLoading();' che dovrebbe essere 'loaded & =! store.isLoading();'. Vedi questo [jsfiddle] (http://jsfiddle.net/JHMzp/1). Ci dovrebbe essere un commento in ogni caso, per aiutarci tutti :) – aletzo
Di solito mi evitare il problema, perché mi sforzo per ridurre al minimo andata e ritorno client/server e migliorare le prestazioni : Imposto autoLoad su falso nell'archivio, quindi eseguo una richiesta esplicita di ajax che recupera i dati per tutti i negozi contemporaneamente, quindi uso store.loadData() per impostarlo direttamente su ciascun negozio. Lo svantaggio è ovviamente che richiede più codice e risultati in un accoppiamento più stretto.
Usiamo questo quando ci sono diversi negozi di aspettare:
Ext.define('Ext.ux.StoreLoadCoordinator', {
mixins: {
observable: 'Ext.util.Observable'
},
resetStoreLoadStates: function() {
this.storeLoadStates = {};
Ext.each(this.stores, function(storeId) {
this.storeLoadStates[storeId] = false;
}, this);
},
isLoadingComplete: function() {
for (var i=0; i<this.stores.length; i++) {
var key = this.stores[i];
if (this.storeLoadStates[key]==false) {
return false;
}
}
return true;
},
onStoreLoad: function(store, records, successful, eOpts, storeName) {
this.storeLoadStates[store.storeId] = true;
if (this.isLoadingComplete()==true) {
this.fireEvent('load');
this.resetStoreLoadStates();
}
},
constructor: function (config) {
this.mixins.observable.constructor.call(this, config);
this.resetStoreLoadStates();
Ext.each(this.stores, function(storeId) {
var store = Ext.StoreManager.lookup(storeId);
store.on('load', Ext.bind(this.onStoreLoad, this, [storeId], true));
}, this);
this.addEvents(
'load'
);
}});
Per utilizzarlo, passano in un array dei StoreID rilevanti:
var store1 = Ext.create('Ext.data.Store', {
storeId: 'Store1',
.... (rest of store config)
}});
var store2 = Ext.create('Ext.data.Store', {
storeId: 'Store2',
.... (rest of store config)
}});
var coordinatior = Ext.create('Ext.ux.StoreLoadCoordinator', {
stores: ['Store1', 'Store2'],
listeners: {
load: function() {
// Do post-load work
}
}
});
questo vi darà un carico singolo evento da gestire per più negozi. Si prega di notare che questo richiede Ext 4.xo successiva.
Eccellente! Grazie – Black
Per risolvere questo problema, utilizzo i magazzini di caricamento a catena.
Contro: più lento di quanto dovrebbe essere.
chainStoreLoad :function (stores, lastCall, idx)
{
if (idx === stores.length) {
if ("function" === typeof lastCall) {
lastCall.call();
}
return;
}
stores[idx].load (function (r,o,s) {
Jx.chainStoreLoad (stores, lastCall, idx + 1);
});
}
Esempio:
Jx.chainStoreLoad (
[
this.storeAssetType
, this.storeAssetProcurement
, this.storeAssetStatus
, this.storeAssetLocation
, this.storeSystemUser
]
, function()
{
self.panel.doRefresh (perm);
}
, 0);
- 1. Come distruggere i negozi in ExtJS 4.1?
- 2. Come attendere che tutti i negozi siano caricati in ExtJs?
- 3. Caricamento hasMany data in ExtJS
- 4. istanze di più negozi di flusso
- 5. Caricamento file in extjs 4.2 senza forma.submit()
- 6. In attesa del caricamento della finestra figlio per il completamento
- 7. Tecniche di ottimizzazione del codice in extjs?
- 8. Caricamento asincrono dei dati nei negozi di flusso
- 9. Capire come negozi modelli sono referenziati/loade/un'istanza in ExtJS 4.2 pattern MVC
- 10. extJs gmappanel all'interno del portale di extJs
- 11. In attesa di più richieste POST asincrone
- 12. In un'app MVC Ext JS 4, quale dovrebbe essere responsabile del caricamento dei negozi?
- 13. Più negozi e più amministratori con diversi ruoli
- 14. attesa per più SwingWorkers
- 15. Più tempi di attesa Capybara?
- 16. In attesa di callback per più futures
- 17. Caricamento di più serie in un grafico
- 18. Caricamento di più file con controllo md5 prima del caricamento
- 19. ExtJS MVC, caricamento dinamico e i18n
- 20. Il gestore di successo del caricamento del file Extjs non viene licenziato
- 21. iTunes Connect: come ripristinare lo stato delle app in attesa del caricamento in preparazione per il caricamento
- 22. in attesa di più variabili condizionali in boost?
- 23. Caricamento più veloce di ListView, più veloce del metodo Viewholder
- 24. In attesa di più thread per completare in Java
- 25. C# In attesa di più eventi in Producer/Consumer
- 26. Akka.net in attesa di più pezzi di dati
- 27. I dati principali archiviano l'atomicità con più negozi
- 28. In attesa di eventi multipli
- 29. Utilizzo del file .hs in attesa.
- 30. ExtJS Conservare problema del carico di callback
correlati a http://stackoverflow.com/questions/11003605/how-to-wait-until-all-stores-are-loaded-in-extjs – Patrick