3

我有以下user对象(json):

{
    "_id": "my-id",
    "org": 666,
    "type": "user",
    "properties": {
        "first_name": "Firstname",
        "surname1": "Surname1",
        "surname2": "Surname2",
        "allowed_apps": [ "one-app", "another-app" ],
        "default_app": "one-app",
        "email": "email@address.com"
    },
    "outputs": {
        "extension": "extension-id"
    }
}

这是一个单一的模型,具有复杂的结构。它不是“多模型结构”。因此,我想使用 来定义这个DS.Model.extend,但我不想使用belongsTo关系,因为它们propertiesoutputs引用其他模型:这些字段只是复杂数据,直接成为我的user对象的一部分。也就是说,我们没有任何properties模型,也没有任何outputs模型。这些只是user模型的一部分,因此存储在数据库中(在我们的例子中是 couchdb)。

这可以在ember中完成吗?

4

1 回答 1

4

可悲的是,这种结构是不可能使用ember-data模型的。如果不使用or进行设计,模型的每个非原始值(例如string,numberboolean& )date都不能定义为模型属性。此外,这个仍然是 WIP 的站点jsonapi.org描述了它的实现方向。belongsTohasManyember-data

因此,如果您想要/需要使用ember-data模型(DS.Model),那么重点就在这里,您的服务器应该遵守 JSON 格式的ember-data预期,否则您总是有可能(因为 ember-data 与后端无关)根本不使用ember-data模型定义,这样,您的模型可以按照您想要的方式构建,但是您将无法从传统的工作ember-data适配器和序列化程序为您提供帮助,您必须编写自己的适配器,然后处理您的 JSON 的所有特性并最终将它们加载到您的商店中。

如果您绝对需要与后端交换自定义数据结构,则可以注册自定义转换,例如:

App.Adapter.registerTransform('mega', {
  deserialize: function(serialized) {
    //do your custom deserialization
  },
  serialize: function(deserialized) {
    //do your custom serialization
  }
});

然后像这样使用它:

App.MyModel = DS.Model.extend({
  megaValue: DS.attr('mega');
});

希望能帮助到你。

于 2013-06-24T16:48:29.023 回答