我正在尝试通过我的REST API获取当前登录用户,然后将其设置为ApplicationController的属性。这就是我试图这样做的方式:
App.ApplicationController = Ember.Controller.extend({
init: function() {
this._super();
var self = this;
App.User.findCurrent().then(function(user) {
self.set('currentUser', user);
});
}
});
App.User = Ember.Object.extend({});
App.User.reopenClass({
findCurrent: function() {
return $.getJSON('/api/v1/users/current').then(
function(response) {
return response.user;
}
);
}
});
当我查看Chrome网络标签时,我看到有一个API调用并且返回了JSON,但是当我尝试访问例如我的应用程序模板(或其中的一部分)中的{{currentUser.name}}
,它不会返回名称。也没有错误。
但是在应用程序模板中它不会返回它。
我错过了什么?
谢谢!
修改
当我创建另一个控制器时,例如HelpController
并访问/help
,然后{{currentUser.name}}
会返回用户名:
App.HelpController = Ember.Controller.extend({
needs: ['application'],
currentUser: Ember.computed.alias('controllers.application.currentUser')
});
修改2
抱歉,我忘了提到我实际上是尝试使用部分({{currentUser.name}}
)中的{{partial 'sidebar'}}
,但这不应该改变任何东西,因为这是相同的范围,对吧? / p>
编辑3
我注意到一些非常奇怪的事情。当我在我的应用程序模板中调用{{currentUser.name}}
时(这不是我想要的btw),那么它也适用于{{partial 'sidebar'}}
。
编辑4
根据要求:
DEBUG: Ember.VERSION : 1.0.0-rc.6 ember.js?body=1:361
DEBUG: Handlebars.VERSION : 1.0.0-rc.4 ember.js?body=1:361
DEBUG: jQuery.VERSION : 1.10.0
答案 0 :(得分:1)
这不是放置这个逻辑的正确位置。您可以使用model
上的路由挂钩afterModel
和ApplicationRoute
来轻松完成此操作。通常在ember中,数据的加载是在路由钩子中完成的。这允许路由器在加载时暂停,因此当控制器和模板发挥作用时,它们正在处理加载的数据。
App.ApplicationRoute = function() {
model: function() {
return App.User.findCurrent();
},
afterModel: function(model) {
App.set('currentUser', model)
}
}