我已在Mirage工厂中声明了以下属性,并使用了docs中的Dependent属性。
price() {
return faker.finance.amount(100000, null, 0);
},
priceDisplay() {
return '$' + this.price;
}
当我做补丁来更新price
时,我希望priceDisplay
也会像computed
属性一样进行更新,但是事实并非如此。
有人知道这是否可能,或者这是幻影限制吗?
答案 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返回格式化的字符串是否正确。我认为,格式化数据应该是客户关心的问题。否则,如果需要支持本地化或在客户端中要求使用其他格式,则会很快遇到限制。