我从Ember开始,我想知道是否可以这样做。
我的书的服务器型号:
Book = {
name: 'string',
author_id: 'number'
}
但在我的Ember方面,我想要有这样的东西:
Book = {
name: DS.attr('string'),
author: DS.belongsTo('author' , {via: 'author_id'})
}
这可能吗?
答案 0 :(得分:2)
是的,这是可能的。但是,您没有在关系上定义,您可以在序列化程序中实现转换行为。因此,不要告诉Ember您的服务器调用该关系的东西不同,您只需将关系转换为Ember想要的格式,然后再将其加载到商店中。
例如,如果您使用RESTSerializer,则可以覆盖keyForRelationship挂钩。
App.BookSerializer = DS.RESTSerializer.extend({
keyForRelationship: function(key) {
if (key === 'author') {
return 'author_id';
} else {
return key;
}
}
});
这将告诉序列化程序从JSON中的author
字段获取author_id
关系的数据。它还可以确保在将JSON发送回服务器时,它会在序列化时将author
关系转换回author_id
属性。
如果您没有使用RESTSerializer,您可能会在Ember Data API documentation page上找到您正在使用的序列化器,而您的序列化器很可能采用相同的方法或非常类似的方法。