Ember-Data destroyRecord停留在本地商店

时间:2014-12-31 21:22:52

标签: ember.js ember-data

我正在使用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>

2 个答案:

答案 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。经验教训,也许我应该使我的计算属性更明确,如isStatusDeletedisStatusDrafted

相关问题