【发布时间】:2018-12-18 14:08:56
【问题描述】:
我想知道是否有办法将计算属性与 ember 数据一起使用,例如,我想根据其他属性的数量计算和保存 totalPrice。我认为我能想到的唯一方法是使用观察者来做这件事
【问题讨论】:
标签: ember.js ember-data
我想知道是否有办法将计算属性与 ember 数据一起使用,例如,我想根据其他属性的数量计算和保存 totalPrice。我认为我能想到的唯一方法是使用观察者来做这件事
【问题讨论】:
标签: ember.js ember-data
Ember data model 和普通的Ember Object 之间没有什么不同,您可以在模型上定义计算属性,就像为组件、控制器、路由等所做的一样。请检查official ember guide。它有以下模型示例:
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;
})
});
类似于上面的东西应该可以正常工作。
在关于将计算属性发送到后端的评论之后;某事类似于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;
},
});
【讨论】:
CP 发送到后端的评论后,我打算这样做。我没有尝试提供的代码;但我猜你的想法与我提供的相似。对吗?