我想我做错了什么,但我不知道是什么。
当我的应用程序加载时,它需要检索所有公司,当这些公司到达时,它需要activeCompany
在我的ApplicationController
. content.isLoaded
但是,当我在我的 is上绑定一个观察者时,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());
}
});
公司控制器
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
属性。
当我将观察者更改为content.@each
它时,它会触发数组中的所有项目。
编辑
我可以像这样解决它:
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
这仅在我的更改时触发。