2014-06-22 48 views
1

我试图将当前用户加载到数据存储区,但遇到一些困难。服务器使用PassportJS和来访/api/users/me返回类似这样的JSON对象:Ember-Data“TypeError:this.container is undefined”

{"user":{"_id":"53a4d9c4b18d19631d766980","email":"[email protected]", 
"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

您是否在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

+0

是的,我通过'App.store = DS.Store.create()限定所述存储器;'。我添加了类型来查找,但这似乎没有什么区别。 –

+0

这不是应该如何定义商店。您是否使用旧版本的Ember Data? https://github.com/emberjs/data/blob/master/TRANSITION.md – Kingpin2k

+0

我正在使用当前版本。这些文档是否过时? http://emberjs.com/api/data/classes/DS.Store.html –