Avec Ember et Ember-Data: Comment configurer un rappel lorsqu'un magasin est terminé le chargement et / ou lorsqu'une vue associée est terminée à nouveau?
-
13-11-2019 - |
Question
J'utilise des données Ember et Ember pour charger quelques centaines d'objets d'une API REST, en utilisant un appel Findall dans un adaptateur personnalisé. J'ai un arrayController.Content faisant référence à la fin a récemment ajouté Ember.Select Pour afficher les objets dans un widget de sélection / dropdown-menu. J'ai besoin d'exécuter une fonction sur le widget de sélection une fois qu'il est entièrement rendu avec tous les objets (chaque objet étant une option de sélection) - en particulier, le Bibliothèque choisie.js.
Parce qu'il faut un peu de temps (2-4 secondes) pour gérer les quelques centaines d'objets dans le Select, en utilisant des rappels sur les événements Ember.Select.DiDinsertElement et Ember.ArrayController.ContentDidChange ne fonctionnent pas tout à fait; Ils tirent tous les deux trop tôt. Y a-t-il donc un autre événement ou une autre approche, qui pourrait être utilisé à la place?
La solution
DS.RESTAdapter.findQuery
Est la réponse! Contrairement au DS.RESTAdapter.findAll
Méthode, il crée et revient DS.AdapterPopulatedModelArray
, qui a son propre est chargé correctement que vous pouvez observer n'importe où dans votre application!
Par exemple:
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')
});