我正在尝试将当前用户加载到数据存储中,但遇到了一些困难。服务器使用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控制器没有内容。谢谢您提供任何帮助。
答案 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')
});