我正在尝试从DashboardIndexView中的DashboardIndexController访问数据
JP.DashboardIndexController = Ember.Controller.extend({
users: []
});
是否可以在didInsertElement中的JP.DashboardIndexView中访问用户?
didInsertElement : function(){
console.log(this.get("controller.users").objectAt(0));
}
这是我的DashboardIndexRoute:
JP.DashboardIndexRoute = Ember.Route.extend({
setupController: function(controller, model) {
controller.set('users', JP.User.find());
}
});
谢谢
修改
console.log(this.get("controller.users").objectAt(0));
仅当我转到UsersIndex
然后回到DashboardIndex
时才返回数据...我认为这是初始化的内容,但我不知道,如何修复它。
答案 0 :(得分:9)
是的,这是访问用户列表的方法。
这是因为在DashboardIndexView
填充了来自服务器的数据之前,controller.users
被插入到DOM中。
因此,当呈现视图时,controller.users
仍为空,并且在ajax请求完成后将异步填充,问题是didInsertElement
已经被触发。
为了解决这个问题,您需要从另一个钩子访问controller.users
。 DidInsertElement
是错误的地方,因为无论JP.User.find()
是否已完成加载,它都会触发。
即使视图已经在DOM中,您只需要确保在加载JP.User.find()
时重新触发它。像这样:
JP.DashboardIndexView = Ember.View.extend({
didInsertElement: function() {
this.usersChanged();
},
usersChanged: function() {
if (!this.$()) { return; } // View not in DOM
console.log(this.get('controller.users'));
}.observes('controller.users.@each')
});