我的模型中包含store
属性。很遗憾,store
是ember-data中的保留字,因此我必须将其名称更改为authStore
。我无法更改后端API以使用新的属性名称,因此我为此模型创建了一个新的序列化程序。
模型是:
App.Auth = DS.Model.extend({
status: DS.attr("string"),
authStore: DS.belongsTo("store"),
});
如果我使用以下序列化程序,发送到服务器的json包含正确的store
密钥
App.AuthSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
authStore: 'store',
}
});
但我还需要为embedded: 'always'
属性指定authStore
,因此我将序列化程序更新为
App.AuthSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
authStore: {key: 'store', embedded: 'always'}
}
});
这种方式key
属性被忽略,即使在将json发送到服务器时嵌入了authStore,也会忽略key
属性并且它具有键authStore
而不是store
。
如何使key
和embedded
属性同时发挥作用?
我使用的是ember-cli 0.2.7和ember-data 1.0.0-beta.18
答案 0 :(得分:2)
不确定为什么要重写密钥,但与此同时,我认为在您的序列化程序中,您可以执行以下操作:
App.AuthSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
authStore: {embedded: 'always'}
},
normalize: function(typeClass, hash) {
hash.authStore = hash.store;
delete hash.store;
return this._super(typeClass, hash)
},
serialize: function(snapshot, options) {
var json = this._super(snapshot, options);
json.store = json.authStore;
delete json.authStore;
return json;
}
});
似乎没有任何关于我确定其他人参与的内容的文档很容易找到。
答案 1 :(得分:1)
embedded: 'always'
与撰写serialize: 'records', deserialize: 'records'
相同,其中records
也可以是ids
,false
,或者如果关系是belongsTo则为单数。< / p>
因此,请尝试:
App.AuthSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
authStore: {key: 'store', serialize: 'records', deserialize: 'records'}
}
});
我已经设法通过将其包装在引号中来创建一个名为store的模型。以下是Operators Serializer的副本,其中Operators与&#34; store&#34;:
具有hasMany关系attrs: {
"stores" : { deserialize: 'records', serialize: 'ids' }
}