Ember.js 余烬数据记录保存在本地存储中
我在灰烬1.8.1和灰烬数据测试版12 如果我执行createRecord,而用户选择不保存它,则在取消激活路由时,我将尝试执行model.destroyRecord(),但是,它在我的本地存储中仍然可用,并且具有currentState.stateName:root.deleted.saved 我似乎无法将它从本地商店中移除,我也不知道为什么。为什么记录的状态名为Ember.js 余烬数据记录保存在本地存储中,ember.js,ember-data,Ember.js,Ember Data,我在灰烬1.8.1和灰烬数据测试版12 如果我执行createRecord,而用户选择不保存它,则在取消激活路由时,我将尝试执行model.destroyRecord(),但是,它在我的本地存储中仍然可用,并且具有currentState.stateName:root.deleted.saved 我似乎无法将它从本地商店中移除,我也不知道为什么。为什么记录的状态名为root.deleted.saved,在我执行存储时仍然可用。find 编辑: 我不知道这是否重要,但在取消并销毁记录(或尝试销毁)
root.deleted.saved
,在我执行存储时仍然可用。find
编辑:
我不知道这是否重要,但在取消并销毁记录(或尝试销毁)后,我最终在一个位置使用了带有itemController的each。我想,我的古怪是从这一点开始的
// new/route.js (using ember-cli pods)
deactivate: function() {
this._super();
// if we navigated away without saving the model we should remove it
// so we don't have 'unsaved' items displayed anywhere
var model = this.controller.get('model');
if(model.get('isDirty')) {
model.deleteRecord(); // Updated based on MrVinz suggestion below
}
}
我们转换到的模板
<table class="table table-striped">
<thead>
<tr>
...
</tr>
</thead>
<tbody>
{{#each item in filteredItems itemController="cons"}}
... (my unsaved items are showing up in here, and they should have been deleted) ...
{{/each}}
</tbody>
</table>
...
{{{#filteredItems itemController=“cons”}中的每个项
... (我的未保存项目显示在此处,它们应该已被删除)。。。
{{/每个}}
如果在调用之前没有对记录执行model.save(),我认为model.destroyRecord()
不是最好的方法。我最好选择model.rollback()或model.deleteRecord()
我之所以这么想,是因为createRecord
不会从您的应用商店触发任何服务器/api调用,但使用destroyRecord()
您实际上可能会执行一个不需要的服务器端服务器/api调用(我没有检查destroyRecord()
的代码,但它在过程中的文档状态是model.save())
在我进一步调查的评论中进行讨论后:
除非在beta12中更改了实现,否则不会在未保存的对象上使用destroyRecord()触发API调用
但是
然后,您将处理一个承诺并拥有一个调用函数链,这两个函数都有成本(以资源为单位)。最终,我的问题源于无意中弄乱了
isDeleted
ember数据提供的属性。我有以下几点:
isDrafted: Ember.computed.equal('status', 'Drafted'),
isSubmitted: Ember.computed.equal('status', 'Submitted'),
isValidated: Ember.computed.equal('status', 'Validated'),
isRecalled: Ember.computed.equal('status', 'Recalled'),
isReturned: Ember.computed.equal('status', 'Returned'),
我的状态之一是“已删除”,因此我定义了一个导致我所有问题的
isDeleted
。吸取的教训是,也许我应该让我的计算属性更明确,比如isStatusDeleted
,isStatusDrafted
,等等。你能详细说明一下工作流程和遇到的问题吗?您确定您对服务器的调用没有再次返回记录吗?请向我们展示您正在转换的model/setupController的最小/恢复的实现,并向我们展示您如何声明/获取您的filteredItems:)destroyRecord
调用deleteRecord
然后保存。也许这就是你在这里说的,如果是的话,请不要理会我的评论。@Kingping2k这正是我的本来面目saying@Kingpin2k或者那些投票否决我的人请证明,因为我认为我的答案没有那么糟糕。事实上:model.destroyRecord将调用model.save(),如果余烬正确处理后端将不会调用的内容,否则后端可能会引发错误。即使ember正确地管理model.destroyRecord完成的保存调用,该操作仍有成本,在这种情况下是无用的。destroyRecord
如果记录是root.deleted.save
,则不会回调服务器,这是deleteRecord
将新记录放入的状态<新记录的code>deleteRecord
或rollback
将使其处于该状态。如果你能修改你的答案来反映这一点,我会很高兴地推翻我的投票,不幸的是,这三种方法的结果应该是相同的,这意味着他的代码应该是相同的。因此,无论是否使用deleteRecord
/destroyrord
/rollback
@Kingpin2k edited,他的问题仍然会发生,但是这三种方法是等价的,因为如果您使用destronRecord(),您仍然需要处理一个承诺,这两种方法都是如此。