2015-09-23 47 views
0

我有一個像Ember.js嵌入式記錄不工作

{ 
    "meta":{ 
     "per":20, 
     "page":1, 
     "total":2 
    }, 
    "users":[ 
     { 
     "id":119506, 
     "first_name":"erglk", 
     "last_name":"wfe", 
     "email":"[email protected]", 
     "groups":[ 
      { 
       "id":5282, 
       "name":"test" 
      }, 
      { 
       "id":8880, 
       "name":"everybody" 
      } 
     ] 
     }, 
     { 
     "id":119507, 
     "first_name":"eriglk", 
     "last_name":"wife", 
     "email":"[email protected]", 
     "groups":[ 
      { 
       "id":5284, 
       "name":"testf" 
      }, 
      { 
       "id":8880, 
       "name":"everybody" 
      } 
     ] 
     } 
    ] 
} 

一個JSON眼下沒有問題訪問用戶,但我有一些困難,以訪問陣列。我試過hasManybelongsTo沒有成功。我有錯誤。 我讀過幾篇關於EmbededRecordMixin的文章,但沒有獲得任何成功。

如果我在我的模型聲明:

export default DS.Model.extend({ 
    first_name: DS.attr('string'), 
    last_name: DS.attr('string'), 
    email: DS.attr('string'), 
    groups: DS.attr('group') 
}); 

我得到:錯誤在處理路徑:用戶斷言失敗:無法找到轉化爲「組」錯誤:斷言失敗:無法找到轉化爲'組'

+0

什麼版本的Ember數據和您使用的是哪個適配器/串行器? –

+0

@TylerIguchi餘燼2和RESTSerializer – Mio

回答

2

我們使用DS.attr來告訴Ember這個字段是一個模型的屬性,並且我們可以選擇指定這個屬性的類型。默認情況下,僅允許的類型爲string,number,booleandate。爲了支持自定義類型,應該定義特殊類(轉換)。這就是燼寶試圖告訴你這個錯誤信息。如何定義這樣的類,你可能會發現here

但是,你不需要爲你的任務定義一個自定義轉換。您需要定義一個關係:

export default DS.Model.extend({ 
    first_name: DS.attr('string'), 
    last_name: DS.attr('string'), 
    email: DS.attr('string'), 
    groups: DS.hasMany('group', {async: false}) 
}); 

並使用EmbeddedRecordMixin,如官方docs描述。我可以向你保證,它按照那裏描述的那樣工作。

+0

謝謝@ gennady-dogaev。我已經在文檔中設置了與attrs:{groups:{embedded:'always'}}'相同的RESTSerializer。我也在models/group.js:導出默認的DS.Model.extend({用戶:DS.belongsTo('user'), name:DS.attr('string'), });'但是我當我嘗試去頁面時得到:'處理路由時出錯:用戶斷言失敗:傳遞類存儲方法已被刪除。請傳遞一個dasherized字符串,而不是undefined'。他正在等待別的東西...... – Mio

+0

某個模型鉤子可能出錯了 –

+0

這個錯誤似乎來自我的用戶路由:'export default Ember.Route.extend({0128] 。商店。查詢('用戶',PARAMS); \t} });' – Mio

1

我遇到了同樣的問題,並根據Benn的回覆計算出了修復方案,但仍需要一段時間才能啓動並運行。

看到http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html

我創建的應用程序/串行器/ user.js的:

import DS from 'ember-data'; 
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, { 
    isNewSerializerAPI: true, 
    attrs: { 
     groups: { embedded: 'always' }, 
    } 
}); 

和應用程序/模型/ user.js的

export default DS.Model.extend({ 
    groups: DS.hasMany('group', {async: false}), 
}); 

然後將模型加載內嵌屬性正確!