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 依赖属性不会在补丁上更新的主要内容,如果未能解决你的问题,请参考以下文章

ember-cli-mirage 和 babel 错误

在 emberjs 中放置用于开发/测试的资产的地方

如何在emberjs中使用海市蜃楼假数据进行分页?

未能在已部署的 emberjs 应用程序上的资源的“完整性”属性中找到有效的摘要

来自 Mirage 的 Ember 数据无法在 index.hbs 上显示

按属性对 EmberJS 对象数组进行排序