可以扩展余烬数据字段吗?

时间:2016-10-10 10:13:37

标签: ember.js ember-data ember-cli

所以我想说我有类似的东西:

export default DS.Model.extend({
  ...
  status: attr('string'),
});

API会返回以下status的值:pendingdeliveredcompleted。 在Ember应用中,如果status == delivered。该值应改为arrived

这意味着,在模型中,我有一个CP:

refinedStatus: Ember.computed('status', {
  get() {
    if (this.get('status') == 'delivered') {
      return 'arrived';
    }

    else {
      return this.get('status');
    }
  }
}),

我也不喜欢这样一个事实:我需要创建一个名为refinedStatus的新CP,它实际上做同样的事情,但只有一个条件。

有更清洁的方法吗?

2 个答案:

答案 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)

您可以在序列化程序中使用serializeAttributehttp://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);
  }
}