2012-05-19 16 views
5

「地圖」當我試圖加載從emberjs +燼數據軌DB數據我收到此錯誤Emberjs +數據+導軌 - 遺漏的類型錯誤:無法調用未定義

Uncaught TypeError: Cannot call method 'map' of undefined

這裏的coffescript代碼:

window.Cosmetics = Ember.Application.create 

Cosmetics.store = DS.Store.create 
    revision: 4 
    adapter: DS.RESTAdapter.create 
    bulkCommit: false 

Cosmetics.admin_user = DS.Model.extend({ 
    name: DS.attr('string') 
    email: DS.attr('string') 
}); 

Cosmetics.view = Ember.View.extend 
    templateName: 'ember/views/aaa' 

Cosmetics.admin_user.reopenClass 
    url: 'admin/user' 

Cosmetics.store.findAll(Cosmetics.admin_user) 

控制器獲取正確的JSON數據。我試圖從互聯網上找到的例子中映射代碼,但沒有任何幫助。有任何想法嗎?我想我做錯了。預先感謝您的幫助。

+0

你能發佈對象的例子從服務器返回?舊版本的ember和更新版本的數據也會引發上述錯誤,您使用的是什麼版本的ember? –

+0

@CoryLoken這是由rails返回的示例對象 - [object returned](http://pastebin.com/Ttp09BAa)。關於emberjs版本,我使用的是ember-rails gem附帶的版本,但是我已經嘗試使用從github(0.9.7.1)下載的** latest **但沒有成功。 – thyforhtian

+0

與使用ember-rails打包的emberjs版本有相同的問題0.6.0 –

回答

3

燼數據預計的findAll結果模型的多元化的形式下一層:

什麼燼數據期待:

{ 
    "users": [ 
     { 
      "activated": null, 
      "created_at": "2012-05-14T19:35:44Z", 
      "email": "[email protected]", 
      "id": 1, 
      "name": "john doe", 
      "updated_at": "2012-05-15T20:23:06Z" 
     } 
    ] 
} 

它是什麼,在你的榜樣獲得:

[ 
    { 
     "activated": null, 
     "created_at": "2012-05-14T19:35:44Z", 
     "email": "[email protected]", 
     "id": 1, 
     "name": "john doe", 
     "updated_at": "2012-05-15T20:23:06Z" 
    } 
] 

具體來說,錯誤來自於使用JSON響應並在「用戶」鍵下運行「地圖」,這在你的情況下不存在,因此「地圖」正在呼籲「未定義」。

+1

恐怕不是這樣。我試過在控制器中添加一個符號':users'到'respond_with'來獲得嵌套的響應,但仍然是相同的錯誤。它繼續打破在ember-data-latest.js中的'ids = hashes.map(function(hash){...}。 – thyforhtian

3

我有完全相同的問題。我解決這個問題的方法是在我的控制器中的index操作中呈現JSON時添加根節點。這意味着改變這一行:

format.json { render json: @things } 

這樣:

format.json { render json: { things: @things }} 

這是因爲灰燼數據需要在JSON對象根節點,但Rails的默認情況下不包括它。

我希望有幫助。

+0

這或多或少是@tvon建議的。似乎是問題所在,但添加了根節點(不幸的),無論如何,無論如何,謝謝 – thyforhtian

+0

這很奇怪,你有沒有嘗試過調試它?你確定你使用的是最新版本? –

+0

幫助我處理類似的情況 - 謝謝! – novemberkilo

0

我終於找到了解決方案!

我不知道這是否應該做這種方式,但它足以擺脫批量提交。那麼,什麼商店看起來應該是:

Cosmetics.store = DS.Store.create 
    revision: 4 
    adapter: DS.RESTAdapter.create 

bulkCommit: false是導致Uncaught TypeError: Cannot call method 'map' of undefined錯誤。

這個問題似乎在Rails應用中使用時必須只涉及燼數據。

我似乎已經趕到一點點因爲什麼似乎解決問題,造成anothers; |

3

發現問題,不知道解決方案。

如果資源被命名空間下服務,如

App.Event = DS.Model.extend({ 
    name: DS.attr('string'), 
}); 

App.Event.reopenClass({ 
    url: 'api/event' 
}) 

當燼數據解析JSON響應,它確實像json[plural]findAll這應該是json['events'],但是複數計算爲json['api/events'],因此錯誤。我會問,可能會爲此提出一張票。

更新

我已經創建了一張票,這here

解決方法

一劈,我這樣做:

def index 
    respond_to do |format| 
    format.json { render json: { 'api/events': Event.all } } 
    end 
end 
0

根問題的原因是中的複數功能因此解決辦法是固定它;)

DS.RESTAdapter.reopenClass({ 
    pluralize: function(name) { 
     if (!this.plurals[name]) 
     name = name.substring(name.lastIndexOf('/')+1); 

     return this.plurals[name] || name + "s"; 
    } 
    }); 
相關問題