Я думаю, что я делаю что-то неправильно, но я не знаю, что.isLoaded observer не срабатывает в нужное время
Когда мое приложение загружается, ему необходимо получить все компании, и когда они прибудут, ему необходимо установить свойство activeCompany
на моем ApplicationController
. Но когда я привязываю наблюдателя к content.isLoaded
, на моем CompaniesController
возникает пожар, прежде чем данные будут загружены.
Применение
App = Ember.Application.create({
ApplicationController : Ember.Controller.extend({
needs: ['companies'],
activeCompany: null,
activateCompany: function(company) {
this.set('activeCompany',company);
}
})
});
маршрутизатор
App.ApplicationRoute = Ember.Route.extend({
enableLogging : true,
setupController: function(controller, model) {
this.controllerFor('companies').set('content', App.Company.find());
}
});
CompaniesController
App.CompaniesController = Em.ArrayController.extend({
needs: ['application'],
activateCompany: function() {
console.log(this.get('content.length')); // 0
console.log(this.get('content.isLoaded')); // true
console.log(this.get('content.firstObject')); // undefined
this.get('controllers.application').activateCompany(this.get('content.firstObject'));
}.observes('content.isLoaded')
});
Почему content.isLoaded
пожар, когда мои данные не загружены?
Возможно, моя концепция неверна, но остальная часть моего приложения зависит от activeCompany
для извлечения других данных. У меня также есть «компания-коммутатор», которая также устанавливает свойство activeCompany
.
Когда я меняю своего наблюдателя на [email protected]
, он запускается для всех предметов, находящихся в массиве.
EDIT
Я мог работать вокруг него, как это:
App.CompaniesController = Em.ArrayController.extend({
needs: ['application'],
activateCompany: function() {
if (this.get('content.length') > 0)
this.get('controllers.application').activateCompany(this.get('content.firstObject'));
}.observes('content.firstObject.isLoaded')
});
Это срабатывает только когда мои firstObject
изменения.
Попробуйте изменить App.Company.find() для App.Store.findQuery (App.Company) –
App. У магазина нет метода 'findQuery', когда я пытаюсь это сделать, это ошибка. –
oh Я предположил, что вы вообще не получаете свойство isLoaded, а предыдущий комментарий восходит к старой версии ember, проверьте ответ, который я опубликовал, он может решить проблему. –