烬数据:选择不使用身份映射和忽略关系



Ember Data的一个强大之处在于,它使用身份映射来确保有一个单一的真实来源,但为了确保这一点发生,它对模型需要如何配置以及服务器需要返回什么有非常明确的规定。但有时在一个只读的应用中,单一的数据源是不必要的,改变服务器上的API是不必要的。在这些情况下,是否有一种方法可以告诉Ember Data只接受数组或对象,而不尝试将其映射到身份映射?下面是一个使用小部件和类别的快速示例:

这就是烬数据希望我们做的:

App.Widget = DS.Model.extend({
    name: DS.attr('string'),
    categories: DS.hasMany('category')
});
App.Category = DS.Model.extend({
    name: DS.attr('string')
});

Ember Data希望我们从服务器返回这个:

{
    "widget": {
        "name":"Awesome Device!",
        "categories":[1,2]
    },
    "categories":[
        {id:1,"name":"Device"},
        {id:2,"name":"Fun"}
    ]
}

但是如果这是一个只读的应用程序,类别不会改变,有没有办法告诉Ember Data将类别视为简单的值对象?

App.Widget = DS.Model.extend({
    name: DS.attr('string'),
    categories: DS.attr('array') // any way to do something like this?
});

那么服务器可以简单地返回这个:

{
    "widget": {
        "name":"Awesome Device!",
        "categories": [
            { id: 1, "name": "Device" },
            { id: 2, "name": "Fun" }
        ]
    }
}

您可以创建自己的转换,您可能尝试的一些常见转换是raw或array。当我懒惰的时候,我通常倾向于raw

App.RawTransform = DS.Transform.extend({
  deserialize: function(serialized) {
    return serialized;
  },
  serialize: function(deserialized) {
    return deserialized;
  }
});
App.register("transform:raw", App.RawTransform);
App.Widget = DS.Model.extend({
    name: DS.attr('string'),
    categories: DS.attr('raw')
});
http://emberjs.com/api/data/classes/DS.Transform.html

最新更新