Ember: 在不设置 isdirty 的情况下编辑模型对象

Ember: Edit model object without setting isdirty

这个主题之前在 Whosebug 上讨论过,但我认为没有使用最新版本的 ember 数据。我发现的建议中至少 none 对我有用。

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

场景

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

正在寻找解决方案

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

感谢任何帮助。

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

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

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

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

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

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