2016-10-10 25 views
0

所以可以说我有类似的信息(模型):以下为status扩展可能的余烬数据字段?

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

API返回: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,字面做同样的事情,但只有有一个条件。

是否有更清洁的方法?

回答

0

可以在(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); 
    } 
} 
+0

获取'错误而工艺路线:products.index无法读取未定义类型错误的特性“类型”:无法读取的未定义的属性“类型” –

3

创建使用命令

ember generate transform refined-status 

精,status.js覆盖反序列化方法,服务器响应转换成你需要变换串行使用serializeAttribute格式。

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'), 
});