2012-01-24 9 views
5

Estoy usando Ember y Ember-data para cargar algunos cientos de objetos desde una API REST, utilizando una llamada findAll dentro de un adaptador personalizado. Tengo un ArrayController.content que hace referencia a findAll, y luego uso el recently added Ember.Select para mostrar los objetos en un widget/menú desplegable de selección. Necesito ejecutar una función en el widget de selección una vez que esté completamente procesada con todos los objetos (cada objeto es una opción de la selección), en particular, el Chosen.js library.Con Ember y Ember-data: ¿Cómo configurar la devolución de llamada cuando una tienda termina de cargarse y/o cuando una vista asociada termina de volver a renderizarse?

Debido a que toma unos segundos (2-4 segundos) manejar los pocos cientos de objetos en la selección, utilizando devoluciones de llamada en los eventos Ember.Select.didInsertElement y Ember.ArrayController.contentDidChange no funcionan del todo; ambos disparan demasiado pronto. Entonces, ¿hay otro evento u otro enfoque que pueda usarse en su lugar?

Respuesta

9

DS.RESTAdapter.findQuery es la respuesta! A diferencia del método DS.RESTAdapter.findAll, crea y devuelve DS.AdapterPopulatedModelArray, que tiene su propio isLoaded correctamente que puede observar en cualquier lugar de su aplicación.

Por ejemplo:

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') 
}); 
Cuestiones relacionadas