EmberJS Mirage 依赖属性不会在补丁上更新
Posted
技术标签:
【中文标题】EmberJS Mirage 依赖属性不会在补丁上更新【英文标题】:EmberJS Mirage Dependent attributes do not update on patch 【发布时间】:2019-07-09 01:44:10 【问题描述】:我在 Mirage 工厂中声明了一个属性,如下所示,并使用了 docs 中的 Dependent 属性。
price()
return faker.finance.amount(100000, null, 0);
,
priceDisplay()
return '$' + this.price;
当我更新price
的补丁时,我希望priceDisplay
能够像computed
属性一样更新,但事实并非如此。
有谁知道这是可能的还是 Mirage 的限制?
【问题讨论】:
这在工厂内似乎是不可能的,但您可以从 Mirage 配置中手动完成。 我认为将价格转换的逻辑从 Mirage 移到模型中会很好 【参考方案1】:幻影工厂是用来生成测试数据的:
工厂是帮助您组织数据创建逻辑的类,可以更轻松地在开发期间或测试中定义不同的服务器状态。
工厂仅由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 返回格式化字符串是否是正确的方法。在我看来,格式化数据应该是客户关心的问题。否则,如果您需要支持本地化或需要在客户端中使用不同的格式,您将很快遇到限制。
【讨论】:
以上是关于EmberJS Mirage 依赖属性不会在补丁上更新的主要内容,如果未能解决你的问题,请参考以下文章
未能在已部署的 emberjs 应用程序上的资源的“完整性”属性中找到有效的摘要