EmberJS Mirage Dependent属性不会在补丁程序上更新

时间:2019-07-09 01:44:10

标签: ember.js ember-cli-mirage

我已在Mirage工厂中声明了以下属性,并使用了docs中的Dependent属性。

price() {
  return faker.finance.amount(100000, null, 0);
},

priceDisplay() {
  return '$' + this.price;
}

当我做补丁来更新price时,我希望priceDisplay也会像computed属性一样进行更新,但是事实并非如此。

有人知道这是否可能,或者这是幻影限制吗?

1 个答案:

答案 0 :(得分:1)

幻影工厂旨在生成测试数据:

  

Factories是可帮助您组织数据创建逻辑的类,可简化在开发过程中或在测试内定义不同服务器状态的过程。

server.create('foo')server.createList('foo', 10)仅运行一次工厂来创建记录的初始数据。这可以帮助您避免在测试和方案中重复代码。但这不是代表该记录的模型。

实际上Mirage不支持开箱即用的计算属性。但是您可以使用customizing the serializer来实现。覆盖serialize method应该可以解决问题:

// serializers/product.js

import { JSONAPISerializer } from 'ember-cli-mirage';

export default JSONAPISerializer.extend({
  // This is how to call super, as Mirage borrows [Backbone's implementation of extend](http://backbonejs.org/#Model-extend)
  let json = Serializer.prototype.serialize.apply(this, arguments);

  json.priceDisplay = '$' + json.price;

  return json;
});

但是从给出的示例中,我会怀疑从API返回格式化的字符串是否正确。我认为,格式化数据应该是客户关心的问题。否则,如果需要支持本地化或在客户端中要求使用其他格式,则会很快遇到限制。