Данные Ember: вычисленные атрибуты - PullRequest
0 голосов
/ 18 декабря 2018

Я хотел бы знать, если есть способ использовать вычисленные свойства с данными ember, например, я хотел бы рассчитать и сохранить totalPrice на основе количества других свойств.Только так, как я думаю, я могу думать об этом, используя наблюдателя

1 Ответ

0 голосов
/ 18 декабря 2018

Ничто не отличается от 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;
  },
});
...