Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 余烬:新记录的记录和销毁的区别_Ember.js_Ember Data - Fatal编程技术网

Ember.js 余烬:新记录的记录和销毁的区别

Ember.js 余烬:新记录的记录和销毁的区别,ember.js,ember-data,Ember.js,Ember Data,在尚未持久化到后端的路由模型的上下文中(其id仍然是null,我们还没有调用save),如果我们想丢弃记录,使用unloadRecord或destroy是否更正确 上下文:当表单从转换而来,但既不保存也不取消时使用。我是ember的新手,我有点困惑于这样一个事实,unloadRecord是模特专用的,但不是商店专用的。这可能很明显,但当将对象称为模型与记录时(我假设它们有时可以互换使用,但如果它们是现有实例,则称它们为记录在技术上是正确的),我也不肯定这是正确的选择 Model-destroyR

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


上下文:当表单从转换而来,但既不保存也不取消时使用。我是ember的新手,我有点困惑于这样一个事实,
unloadRecord
是模特专用的,但不是商店专用的。这可能很明显,但当将对象称为模型与记录时(我假设它们有时可以互换使用,但如果它们是现有实例,则称它们为记录在技术上是正确的),我也不肯定这是正确的选择

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

Store-
unloadRecord
->它只会从Store中卸载,不会向服务器发出任何请求。您只能卸载非脏记录


型号-
unloadRecord
->完全不需要。因为如果创建了记录,那么您将在存储中有条目,所以您可以始终通过存储的
unloadRecord
方法删除非脏记录。

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

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

调用
destroyRecord
时,与
unloadRecord
相反,在调度
保存
时还需要执行一些额外的工作,因此这里的权衡是在调度从不执行的保存和在删除记录之前确定模型状态的额外复杂性之间


卸载记录
-从存储中卸载记录

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

销毁记录
-调用
删除记录
保存


rollbackAttributes
-回滚属性,或者,如果model
是新的
,将其从存储中删除

,因为存在这种情况方法。若模型尚未持久化,它将从存储中删除。此外,在用户单击“保存”之前不要创建模型,但是:

  • 将窗体绑定到控制器的属性。(我通常使用包含所有模型字段的POJO)

  • 当用户单击save按钮时,验证数据、创建模型并调用save方法

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


  • 存储从存储中卸载持久化的记录(因此您不会在本地拥有它,但可能在后端拥有或不拥有它)。

    对新创建的记录调用
    销毁记录
    ,会导致调用
    保存
    ,但是Ember会智能地处理此问题,并且不会实际执行远程请求以将更改持久化到服务器。在您看来,为什么
    rollbackAttributes
    destroyRecord
    更正确?@maffews
    destroyRecord
    的目的是从存储和后端删除持久化记录,虽然问题是关于新的记录,但尚未持续。这就是为什么使用它不那么正确。您无法保证它在将来的版本中能够正确地处理未持久化的记录。文档或代码注释中是否支持这一点?我在这两个文件中都搜索过,但没有找到任何说明
    destroyRecord
    仅用于持久化记录的内容。根据
    destroyRecord
    处理未保存记录的方式,我认为
    destroyRecord
    deleteRecord
    都是合适的,如果不超过
    rollbackAttributes
    @maffews的话,我没有足够的时间进行这场圣战。你可以随心所欲地编写代码。在我看来,使用deleteRecord/destroyRecord是不正确的。文档非常清楚rollbackAttributes,而destroyRecord恰好工作。如果您看看调用
    rollbackAttributes
    如何导致新记录进入删除状态,您可以看到[编辑:抱歉,我在刷新和查看您的评论之前发布了此消息。这不是一场圣战,我只是想了解真相,以避免传播错误信息]