2013-09-05 30 views
0

我是Sproutcore的新手,正在學習基礎知識。我被困在下面的問題:Uncaught TypeError:沒有方法'storeKeyFor'

我有一個模型:

Myapp.Space = SC.Record.extend({ 
    id: SC.Record.attr(Number), 
    name: SC.Record.attr(String), 
    creator: SC.Record.toOne('Myapp.User', {isMaster: YES, inverse: 'space'}) 
}); 

Myapp.User = SC.Record.extend({ 
    id: SC.Record.attr(String), 
    name: SC.Record.attr(String) 
}); 

和控制器:

Myapp.spaces_controller = SC.ArrayController.create(
{ 
     allowsMultipleSelection: NO, 
     selection: null, 
     isEditable: YES 
}); 

在我的數據源我做一個遠程GET調用:

fetch: function(store, query) { 
      var recordType = query.get('recordType'); 
      var url; 
      if (recordType === Myapp.Space) { 
       url = "spaces" 
      } 
      SC.Request.getUrl(this.baseApiUrl(store) + url).set('isJSON', YES) 
       .notify(this, this._didFetch, { 
        store: store, 
        recordType: recordType 
       }).send(); 
     }, 

_didFetch: function (response, params) { 
      var store = params.store, 
       recordType = params.recordType; 
      if (SC.$ok(response)) { 
       store.loadRecords(recordType, response.get('body')); 
      } 
     }, 

當我打電話給

Myapp.spaces_controller.set('content', Myapp.store.find(Myapp.Space)); 

(用戶登錄後)我得到的錯誤:

Uncaught TypeError: Object function (props) { 
     this.__sc_super__ = ret.prototype; 
     return this._object_init(props); 
    } has no method 'storeKeyFor' javascript.js?1377681200:11281 
SC.Store.SC.Object.extend.loadRecord javascript.js?1377681200:11281 
SC.Store.SC.Object.extend.loadRecords javascript.js?1377681200:11337 
Myapp.DataSource.SC.DataSource.extend._didFetch data_source.js?1378388369:39 
SC.Response.SC.Object.extend._notifyListeners javascript.js?1377681198:392 
SC.Response.SC.Object.extend.notify javascript.js?1377681198:413 
(anonymous function) javascript.js?1377681198:314 
SC.run javascript.js?1377681203:14741 
SC.Response.SC.Object.extend.receive javascript.js?1377681198:298 
SC.XHRResponse.SC.Response.extend.finishRequest javascript.js?1377681198:628 
SC.mixin.handle javascript.js?1377681199:4249 
(anonymous function) 

我可以訪問的對象在響應機構,但店裏沒有得到數據。

我在網上找不到任何關於此錯誤的提及。任何人都可以幫忙嗎?

+0

發佈問題後,我發現一個問題,我有一個衝突的類名。但是現在我遇到了下一個問題,出現錯誤:未捕獲的TypeError:無法調用undefined javascript.js的方法'get'1377681200:13225 SC.RecordArray.SC.Object.extend.storeDidChangeStoreKeys javascript.js?1377681200 :13225 (匿名函數)javascript.js?1377681200:10205 SC.Set.SC.mixin.forEach javascript.js?1377681203:8171 SC.Store.SC.Object.extend._notifyRecordArrays javascript.js?1377681200:10204 SC.Store.SC.Object.extend.flush' – ceed

+0

您可以使用gist.github.com創建失敗的完整代碼示例嗎? –

+0

感謝您提供更多幫助!我剛剛解決了這個問題,這是什麼Sproutcore具體,我忘了在方法「store.dataSourceDidFetchQuery(query)」的回調函數中設置一個參數「查詢」。所以現在正在運行:) – ceed

回答

0

Object function(props) ... has no method 'storeKeyFor'的錯誤在我看來像你試圖調用一個類的函數而不是該類的實際實例。

我的第一個猜測是你的recordType被設置爲實際的類而不是字符串,這可能會導致一些問題。一般來說,無論何時處理記錄類型,我都會建議使用'MyApp.Space',因爲這將在運行時進行評估和找到。如果由於某種原因找不到它,它會發出一個更好的信息。

希望這會有所幫助!

+0

非常感謝,確實我有另一個名爲Myapp.Space的視圖,所以這已得到解決。 (仍在努力解決下一個錯誤,...... :) – ceed

相關問題