2012-01-24 8 views
5

Sto utilizzando Ember e Ember-data per caricare alcune centinaia di oggetti da un'API REST, utilizzando una chiamata findAll all'interno di un adattatore personalizzato. Ho un oggetto ArrayController.content che fa riferimento a findAll e quindi utilizzo lo recently added Ember.Select per visualizzare gli oggetti in un widget di selezione/menu a discesa. Ho bisogno di eseguire una funzione sul widget di selezione una volta che è completamente renderizzata con tutti gli oggetti (ogni oggetto è un'opzione della selezione) - in particolare, lo Chosen.js library.Con i dati di brace e brace: come impostare la richiamata al termine del caricamento di un negozio e/o quando una vista associata viene completata con il re-rendering?

Poiché è necessario un po 'di tempo (2-4 secondi) per gestire le poche centinaia di oggetti nella selezione, utilizzando i callback sugli eventi Ember.Select.didInsertElement e Ember.ArrayController.contentDidChange non funzionano abbastanza; entrambi sparano troppo presto. Quindi c'è un altro evento, o un altro approccio, che potrebbe essere usato al suo posto?

risposta

9

DS.RESTAdapter.findQuery è la risposta! In contrasto con il metodo DS.RESTAdapter.findAll, crea e restituisce DS.AdapterPopulatedModelArray, che ha il proprio isLoaded correttamente che puoi osservare ovunque nella tua app!

Ad esempio:

App.store = DS.Store.create({ 
    adapter: DS.RESTAdapter.create() 
}); 

App.set('MyItemList', App.store.findQuery(App.Item, 'homepageList')); 

App.MyView = Ember.View.extend({ 
    refresh: function() { 
     console.log('finished loading custom list'); 
    }.observes('App.MyItemList.isLoaded') 
});