我有以下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
和properties
使用outputs
关系,因为它们不要引用其他模型:这些字段只是复杂数据,直接属于我的user
对象。也就是说,我们没有任何properties
模型,也没有任何outputs
模型。这些只是user
模型的一部分,因此存储在数据库中(在我们的例子中是couchdb)。
这可以在ember中完成吗?
答案 0 :(得分:4)
可悲的是,使用ember-data
模型无法实现这种结构。
模型的每个值都不是原始模型,例如string
,number
,boolean
&如果不使用date
或belongsTo
进行设计,则无法将hasMany
定义为模型属性。此外,仍然是WIP的网站jsonapi.org描述了ember-data
的实施方向。
所以关键在于,如果你想/需要使用ember-data
模型(DS.Model),你的服务器应该遵守ember-data
期望的JSON格式,否则你总是有可能(因为ember-数据是后端不可知的)根本不使用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');
});
希望它有所帮助。