簡體   English   中英

從REST Web API將對象映射到ember模型的最佳方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM