2013-08-05 18 views
1

我正在嘗試掛接Ember數據以使用現有的REST API。我遇到的問題是REST實現不符合Ember Data預期要做的事情。我在網上搜索了一些文檔,這些文檔會提示如何讓事情順利進行,但是沒有編寫我自己的DS.Adapter實現,我很茫然。在非標準REST API中使用Ember數據

這裏是我的要求是這樣的:

/api/user/12345 

它提供了以下回應:

{ 
    data: { 
     ID: '12345', 
     firstName: 'Fred', 
     lastName: 'Flintstone', 
     emailAddr: '[email protected]' 
    } 
} 

灰燼預計 「數據」 爲 「用戶」。不幸的是,我不能輕易改變API。有什麼建議麼?

感謝

我能想到的,你可以做到這一點,將通過創建自己的串行和覆蓋 extract功能

回答

2

方式一:

App.RESTSerializer = DS.RESTSerializer.extend({ 
    extract: function(loader, json, type, record) { 
    var root = 'data'; 

    if (json[root]) { 
     if (record) { loader.updateId(record, json[root]); } 
     this.extractRecordRepresentation(loader, type, json[root]); 
    } 
    } 
}); 

App.Store = DS.Store.extend({ 
    adapter: DS.RESTAdapter.extend({ 
    serializer: App.RESTSerializer.create() 
    }) 
}); 

請注意,這種修改假設您的請求內容始終位於JSON的data密鑰下。

另外值得一提的是,原來extract方法具有未包括在示例兩行:

this.sideload(loader, type, json, root); 
this.extractMeta(loader, type, json); 

這使你鬆散side loading功能和metadata萃取。我希望這個功能不是顯示擋塊您的使用案例。

希望它有幫助。

+0

工作就像一個魅力,謝謝! – mzabriskie

+0

@ mzabriskie,很高興我能幫上忙,不要忘了標記答案已被接受,所以未來的人們會磕磕碰碰,知道它對你有用,謝謝:) – intuitivepixel