Ember-Data" TypeError:this.container未定义"

时间:2014-06-22 03:26:08

标签: ember.js controller ember-data containers store

我正在尝试将当前用户加载到数据存储中,但遇到了一些困难。服务器使用PassportJS,访问/api/users/me返回类似于此的JSON对象:

{"user":{"_id":"53a4d9c4b18d19631d766980","email":"ashtonwar@gmail.com",
"last_name":"War","first_name":"Ashton","location":"Reading, England",
"birthday":"12/24/1993","gender":"male","fb_id":"615454635195582","__v":0}}

我的商店只是由App.store = DS.Store.create();

定义

检索当前用户的控制器是:

App.UsersCurrentController = Ember.ObjectController.extend({
    content: null,
    retrieveCurrentUser: function() {
        var controller = this;
        Ember.$.getJSON('api/users/me', function(data) {
            App.store.createRecord('user', data.user);
            var currentUser = App.store.find(data.user._id);
            controller.set('content', currentUser);
        });
    }.call()
});

我的应用程序控制器调用它:

App.ApplicationController = Ember.Controller.extend({
    needs: "UsersCurrent",
    user: Ember.computed.alias("controllers.UsersCurrent")
});

我怀疑行App.store.createRecord('user', data.user);导致了问题,但我不知道如何修复它。

控制台记录TypeError: this.container is undefined,而Ember调试器显示每个承诺都已完成,而users.current控制器没有内容。谢谢您提供任何帮助。

1 个答案:

答案 0 :(得分:2)

您是否在App命名空间上定义商店,因为默认情况下Ember Data不会这样做。无论哪种方式,您都无法在创建记录后定义要查找的类型。

var currentUser = controller.store.find('user', data.user._id);

createRecord返回记录,因此之后找不到它

var currentUser = controller.store.createRecord('user', data.user);

同样在您的示例中,您尝试立即在类型上调用该函数,而不是在实例上调用该函数。您应该将其添加为在init上运行的方法。

App.UsersCurrentController = Ember.ObjectController.extend({
    retrieveCurrentUser: function() {
      console.log('hello')
        var controller = this;
        Ember.$.getJSON('api/users/me', function(data) {
            var user = controller.store.createRecord('user', data.user);
            controller.set('model', user);
        });
    }.on('init')
});

http://emberjs.jsbin.com/OxIDiVU/693/edit