2016-10-10 2 views
0

Так позволяет сказать, что у меня есть что-то вроде (в модели):Возможно расширение полей данных ember?

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

Я также не нравится тот факт, что мне нужно создать новый CP под названием refinedStatus, которая буквально делает то же самое, но только имеющий одно условие.

Есть ли более чистый подход?

ответ

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); 
    } 
} 
+0

Получение 'Ошибка при обработке маршрута: products.index Не удается прочитать свойство«тип»неопределенной TypeError: Не удается прочитать свойство«тип»не определен –

3

создать преобразование с помощью команды

ember generate transform refined-status 

рафинированных-status.js переопределить метод Deserialize для преобразования ответа сервера требуется формат.

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'), 
}); 
Смежные вопросы