Ember: unloadRecord 和销毁新记录的区别

Ember: difference between unloadRecord and destroy for new records

在尚未持久化到后端的路由模型的上下文中(它的 id 仍然是 null,我们还没有调用 save),如果我们想丢弃记录,使用 unloadRecord 还是 destroy 更正确?

上下文:当表单从中过渡但既未保存也未取消时使用。我是 ember 的新手,我对 unloadRecord 对模型私有但对商店不私有这一事实感到有点困惑。这可能是显而易见的,但我也不确定将对象称为模型还是记录是正确的(我假设它们有时可以互换使用,但如果它们是现有实例,则称它们为记录在技术上是正确的)。

unloadRecord - 是正确的选项。

Model - destroyRecord -> 将调用适配器 deleteRecord,这意味着它将向服务器提出特定记录的删除请求。

Store - unloadRecord -> 它只会从商店卸载,不会向服务器提出任何请求。你只能卸载非脏记录

型号 - unloadRecord -> 根本不需要。因为如果创建了记录,那么您将在商店中有条目,因此您始终可以通过商店的 unloadRecord 方法来删​​除非脏记录。

如果您创建但不保存记录,它将处于 root.loaded.created.uncommitted 状态 (Ember 2.4)。调用 destroyRecord 将安排 save,但也会立即将状态更改为 root.deleted.saved,因此永远不会执行 save 请求。

您可以在浏览器中通过检查通过在新创建的记录上调用 destroyRecord 创建的网络请求来验证这一点。

在调用 destroyRecord 而不是 unloadRecord 时,围绕安排 save 执行了一些额外的工作,因此这里的权衡是安排一个永远不会执行的保存以及在删除记录之前确定模型状态的额外复杂性。

unloadRecord - 从存储中卸载记录

deleteRecord - 删除记录但不保存(必须调用save

destroyRecord - 调用 deleteRecordsave

rollbackAttributes - 回滚属性,或者,如果模型 isNew,则将其从商店中删除

对于这种情况rollbackAttributes存在方法。如果模型尚未持久化,它将从商店中删除。另外,不要在用户点击保存之前创建模型,但是:

  1. 将表单绑定到控制器的属性。 (我通常使用包含所有模型字段的POJO)

  2. 当用户点击保存按钮时,验证数据,创建模型并调用保存方法

  3. 如果将模型持久化到后端失败,rollbackAttributes。如果持久化成功,清除控制器属性(这样当用户添加下一个实体时,表单将是干净的)并重定向。

商店的 unloadRecord 从商店卸载 persisted 记录(因此您不会在本地拥有它,但可能在后端拥有或不拥有它)。