1

我正在尝试通过我的 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'}})中使用,但这不应该改变任何东西,因为这是相同的范围,对吧?

编辑 3

我注意到一件非常奇怪的事情。当我调用{{currentUser.name}}我的应用程序模板(顺便说一句,这不是我想要的)时,它也可以在{{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
4

1 回答 1

1

这不是放置此逻辑的正确位置。您可以使用路由挂钩modelafterModel,ApplicationRoute轻松完成此操作。通常,在 ember 中,数据的加载是在路由挂钩中完成的。这允许路由器在加载时暂停,因此当您的控制器和模板开始发挥作用时,它们正在处理加载的数据。

App.ApplicationRoute = function() {
  model: function() {
    return App.User.findCurrent();
  },
  afterModel: function(model) {
    App.set('currentUser', model)
  }
}
于 2013-07-27T05:54:51.510 回答