灰烬数据:计算属性

时间:2018-12-18 14:08:56

标签: ember.js ember-data

例如,我想知道是否可以将计算的属性与余烬数据一起使用,我希望基于其他属性的数量来计算并保存totalPrice。我认为只有这样,我才能想到使用观察者

1 个答案:

答案 0 :(得分:4)

Ember data model和普通Ember Object之间没有什么不同,您可以像在组件,控制器,路由等中一样在模型上定义计算属性。请检查{{3 }}。它具有以下模型示例:

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被定义为取决于firstNamelastName的计算属性。让我们根据需要创建一个包含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;
  })
});

与上面类似的东西应该可以正常工作。

在将计算的属性发送到后端的评论之后;某事与以下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;
  },
});