![](/img/trans.png)
[英]How to map json data coming from an REST-API to ember.js model?
[英]What's the best way to map objects into ember model from REST Web API?
這篇文章的主題是:對於大型查詢返回,我的解決方案太慢了。
我有一個Web Api通過調用localhost:9090/api/invetories?id=1
來提供如下所示的REST結果:
[
{
"inventory_id": "1",
"film_id": "1",
"store_id": "1",
"last_update": "2/15/2006 5:09:17 AM"
},
{
"inventory_id": "2",
"film_id": "1",
"store_id": "1",
"last_update": "2/15/2006 5:09:17 AM"
}
]
由於我的WebAPI沒有為我的JSON響應提供根密鑰,因此我進行了如下所示的RESTSerializer。
export default DS.RESTSerializer.extend({
extract:function(store,primaryType,payload,id,requestType){
var typeName = primaryType.typeKey;
var data = {};
data[typeName] = payload; // creating root
payload = data;
return this._super(store,primaryType,payload,id,requestType)
}
});
當它運行時,我收到以下錯誤消息: Assetion failed: You must include an 'id' for inventory in an object passed to 'push'
如您所見,這些對象沒有屬性id
,所以我發現Ember RESTSerializer的默認行為迫使我編寫自己的屬性。
好的,所以在這里我不確定我的解決方案是否正確。 inventory_id
從我的回報是獨一無二的,所以我選擇使用,作為一個id
,還好我在想,我的自信心,我就手動添加。 該函數現在看起來像這樣:
export default DS.RESTSerializer.extend({
extract:function(store,primaryType,payload,id,requestType){
var typeName = primaryType.typeKey;
for(var i=0;i<payload.length;i++){
payload[i].id = payload[i].inventoryId;
}
var data = {};
data[typeName] = payload; // creating root
payload = data;
return this._super(store,primaryType,payload,id,requestType)
}
});
僅通過手動復制屬性,我就好像在欺騙該錯誤消息。 另外,有時我會返回一個較大的有效負載數組(超過15萬行)。 循環O(n)似乎不適合為簡單的映射付出代價。
還有什么其他方法可以設置我的WebAPI或序列化程序,所以我避免了for循環分配急需的ember的id
。
我認為這應該可以解決您的問題:
export default DS.RESTSerializer.extend({
primaryKey: 'inventory_id'
});
有了這個參數灰燼數據將映射inventory_id
它的id
參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.