2014-06-22 50 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 –