所以我想说我有类似的东西:
export default DS.Model.extend({
...
status: attr('string'),
});
API会返回以下status
的值:pending
,delivered
,completed
。
在Ember应用中,如果status
== delivered
。该值应改为arrived
。
这意味着,在模型中,我有一个CP:
refinedStatus: Ember.computed('status', {
get() {
if (this.get('status') == 'delivered') {
return 'arrived';
}
else {
return this.get('status');
}
}
}),
我也不喜欢这样一个事实:我需要创建一个名为refinedStatus
的新CP,它实际上做同样的事情,但只有一个条件。
有更清洁的方法吗?
答案 0 :(得分:3)
使用命令
创建变换ember generate transform refined-status
refine-status.js 覆盖反序列化方法,将服务器响应转换为您所需的格式。
import DS from 'ember-data';
export default DS.Transform.extend({
deserialize: function(serialized) {
if(serialized === 'delivered') {
return 'arrived'
} else {
return serialized;
}
},
serialize: function(deserialized) {
return deserialized;
}
});
在模型
中提及此转换export default DS.Model.extend({
...
status: attr('refined-status'),
});
答案 1 :(得分:0)
您可以在序列化程序中使用serializeAttribute
(http://emberjs.com/api/data/classes/DS.JSONSerializer.html#method_serializeAttribute)
serializeAttribute(snapshot, json, key, attribute) {
if (key === "status") {
if (snapshot.attr(key) === 'delivered')
json[key] = 'arrived';
} else {
json[key] = snapshot.attr(key)
}
} else {
this._super(snapshot, json, key, attribute);
}
}