С Ember и Ember-data: Как настроить обратный вызов, когда загрузка магазина завершена и / или когда повторное рендеринг ассоциированного представления завершен? - PullRequest
5 голосов
/ 24 января 2012

Я использую Ember и Ember-data для загрузки нескольких сотен объектов из REST API, используя вызов findAll в пользовательском адаптере. У меня есть ArrayController.content, ссылающийся на findAll, а затем использую недавно добавленный Ember . Выберите , чтобы отобразить объекты в выбранном виджете / выпадающем меню. Мне нужно запустить функцию в виджете выбора, как только он будет полностью отображен со всеми объектами (каждый объект является опцией выбора) - в частности, библиотека Chosen.js .

Поскольку для обработки нескольких сотен объектов в выделении требуется некоторое время (2-4 секунды), использование обратных вызовов для событий Ember.Select.didInsertElement и Ember.ArrayController.contentDidChange не совсем работает; они оба стреляют слишком рано. Так есть ли другое событие или другой подход, который можно было бы использовать вместо этого?

1 Ответ

9 голосов
/ 05 марта 2012

DS.RESTAdapter.findQuery ответ! В отличие от метода DS.RESTAdapter.findAll, он создает и возвращает DS.AdapterPopulatedModelArray, который имеет собственный isLoaded , который вы можете наблюдать в любом месте вашего приложения!

Например:

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