ember.js - Ember 数据: computed attributes

标签 ember.js ember-data

我想知道是否有办法将计算属性与 ember 数据一起使用,例如我想根据其他属性的数量计算并保存totalPrice。我认为我能想到使用观察者来做到这一点的唯一方法

最佳答案

Ember 数据模型 和普通的 Ember 对象 没有什么不同,您可以在模型上定义计算属性,就像为组件、 Controller 、路由所做的那样等请查看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 被定义为依赖于 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;
  })
});

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

在有关将计算属性发送到后端的评论之后;某事。类似于下面的序列化器自定义应该可以工作:

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

关于ember.js - Ember 数据: computed attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53834858/

相关文章:

javascript - Ember JS : how to send an action from a controller?

ruby-on-rails - 为 Ember 格式化 Rabl 或将 Ember 映射到 Rabl?

javascript - 为什么下面的测试没有通过?

javascript - 单页 webapp 所需的设计建议

javascript - 在 Ember 中使用 promise

javascript - 在 Promise 中设置属性后,Ember Controller 不刷新模板

ember.js - Ember js属于关系

websocket - 如何使用 Ember-Data 加载推送的记录更新而不与 inFlight 事务冲突?

javascript - 在 ember 中绑定(bind)数据

ember.js - Controller 策略/垃圾收集(销毁)