Ничто не отличается от Ember data model
от обычного Ember Object
, вы можете определять вычисляемые свойства в своих моделях так же, как вы делаете это для своих компонентов, контроллеров, маршрутов и т. Д. Пожалуйста, ознакомьтесь с официальным руководством по ember .Он имеет следующий пример модели:
import DS from 'ember-data';
import { computed } from '@ember/object';
export default DS.Model.extend({
firstName: DS.attr(),
lastName: DS.attr(),
fullName: computed('firstName', 'lastName', function() {
return `${this.firstName} ${this.lastName}`;
})
});
, где fullName
определяется как вычисляемое свойство в зависимости от firstName
и lastName
.Давайте создадим искусственную модель, которая содержит totalPrice
так, как вы хотели:
import DS from 'ember-data';
import { computed } from '@ember/object';
export default DS.Model.extend({
originalPrice: DS.attr('number'),
vat: DS.attr('number'),
discount: DS.attr('number')
totalPrice: computed('originalPrice', 'vat', 'discount', function() {
return this.originalPrice + this.vat - this.discount;
})
});
, что-то похожее на вышесказанное должно просто работать.
После комментария относительно отправки вычисляемого свойства в backend;СТГ.аналогично приведенной ниже настройке для serializer
должно работать:
import DS from 'ember-data';
export default DS.JSONAPISerializer.extend({
serialize(snapshot, options) {
let json = this._super(...arguments);
json.totalPrice = snapshot.record.get('totalPrice')
return json;
},
});