gpt4 book ai didi

ember.js - 在 didInsertElement 的 View 中从 Controller 访问数据

转载 作者:行者123 更新时间:2023-12-04 17:36:57 24 4
gpt4 key购买 nike

我正在尝试从 DashboardIndexView 中的 DashboardIndexController 访问数据

JP.DashboardIndexController =  Ember.Controller.extend({
users: []
});

是否可以在 didInsertElement 中访问 JP.DashboardIndexView 中的用户?
didInsertElement : function(){
console.log(this.get("controller.users").objectAt(0));
}

这是我的仪表板索引路由:
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 ...我认为这是初始化的问题,但我不知道如何解决它。

最佳答案

是的,这是访问用户列表的方法。

发生这种情况是因为 DashboardIndexViewcontroller.users 之前插入 DOM填充了来自服务器的数据。

所以当 View 被渲染时,controller.users仍然是空的,并且会在 ajax 请求完成后异步填充,问题是,didInsertElement已经开除了。

为了解决这个问题,您需要访问 controller.users从另一个钩子(Hook)。 DidInsertElement是错误的地方,因为无论 JP.User.find() 是否都会触发。完成加载。

您只需要确保它在 JP.User.find() 时重新触发即使 View 已经在 DOM 中也会被加载。像这样的东西:

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

关于ember.js - 在 didInsertElement 的 View 中从 Controller 访问数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15612552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com