【问题标题】:What's the best way to map objects into ember model from REST Web API?从 REST Web API 将对象映射到 ember 模型的最佳方法是什么?
【发布时间】:2015-06-16 03:48:34
【问题描述】:

这篇文章的主题是:我的解决方案对于大查询返回来说太慢了。

我有一个 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)
  }
});

通过手动复制一个属性,我觉得我在欺骗这个错误消息。此外,我有时会返回一个大的有效负载数组(超过 150k 行)。循环 O(n) 似乎并不适合为简单的映射付出代价。

是否有其他方法可以设置我的 WebAPI 或序列化程序,这样我在分配 ember 迫切需要的 id 时就避免了 for 循环。

【问题讨论】:

    标签: json rest ember.js asp.net-web-api ember-data


    【解决方案1】:

    我认为这应该可以解决您的问题:

    export default DS.RESTSerializer.extend({
        primaryKey: 'inventory_id'
    });
    

    有了这个参数,Ember Data 会将inventory_id 映射到它的id 参数。

    【讨论】:

      猜你喜欢
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      相关资源
      最近更新 更多