1

这个话题之前在 stackoverflow 上已经讨论过,但我认为不是最新版本的 ember 数据。至少我发现的任何建议都不适合我。

我使用最新版本的 Ember 和 Ember 数据(版本 2.13.0)。我使用 JsonApiAdapter。

设想

从服务器加载记录后,我想对其某些属性进行一些更改。这些更改不应使记录变脏,并且更改的属性不应显示在record.changedAttributes(). 此后用户可能进行的任何更改都会使记录变脏。

寻找解决方案

我试图手动更改 isDirty 标志,但它没有这样做。我还尝试在 ember 数据代码中找到在加载记录后设置状态的位置(因为本质上我正在尝试做同样的事情)但我还没有找到它在哪里。我也试过record.send('pushedData')了,但我没有改变记录的任何状态。

任何帮助表示赞赏。

4

1 回答 1

3

我知道 3 种方法可以在不弄脏记录的情况下修改服务器的响应:

  1. 您可以覆盖适配器的handleResponse方法并直接在有效负载中进行修改。

  2. 您可以覆盖序列化程序的normalize方法。

  3. 您可以使用 Ember.$.ajax 方法从服务器加载记录,修改响应,然后将其传递给存储的pushPayload方法。

如果您需要在每次从服务器加载后修改记录(无论您从哪个路由/控制器执行此操作),前两种方法都很好。适配器和序列化器都可以是特定于模型的。如果您只需要在一个地方(控制器或路由)执行此操作,或者您需要访问路由/控制器的变量 - 第三种方法很好。

我不知道有什么方法可以将记录标记为脏/不脏。如果您在存储后修改记录,它就会变脏。

于 2017-07-05T13:47:50.020 回答