我正在使用ember 1.8.1和ember-data beta 12
如果我执行createRecord并且用户选择不保存它,则在路由停用时我尝试执行model.destroyRecord()但是,它继续在我的本地存储中使用currentState.stateName:root。 deleted.saved
我似乎无法将其从本地商店中删除,我不知道为什么。为什么记录的stateName为root.deleted.saved
,并且当我执行store.find
时仍然可用?
编辑: 我不知道它是否重要,但在取消并且我销毁记录(或尝试)之后,我最终会在每个使用itemController的位置。我认为,我的奇怪之处始于引入它。
// 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>
答案 0 :(得分:1)
如果你之前没有做过记录的model.save(),我认为model.destroyRecord()
不是最好的方法。我最好去一个model.rollback()或一个model.deleteRecord()。
我鼓掌,因为createRecord
不会从您的商店触发任何服务器/ api调用但是 destroyRecord()
您实际上可能会执行不需要的服务器端服务器/ api调用(我没有检查destroyRecord()
的代码,但是文档状态它在进程中执行了model.save():)
经过评论后我进一步调查了一遍:
除非在beta12中实现更改,否则不会在未保存的对象上使用destroyRecord()触发API调用。
然而
然后你将处理一个承诺并拥有一系列被调用的函数,这些函数都有成本(资源热量)。
答案 1 :(得分:1)
最终,我的问题源于无意中弄乱了isDeleted
属性ember-data提供的内容。我有以下内容:
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'),
我的一个状态是&#39;已删除&#39;所以我定义了导致我所有问题的isDeleted
。经验教训,也许我应该使我的计算属性更明确,如isStatusDeleted
,isStatusDrafted
等