3

在我的应用程序中,我有一个项目列表,以及一个删除最后一个项目的按钮。然后在我的控制器上,我编写了以下操作:

  removeLastItem: ->
      lastItem = current_order.get('items').get('lastObject')
      lastItem.deleteRecord()
      App.store.commit()

当我继续点击按钮太快时,我的问题就出现了。在某些时候,似乎 store.commit() 还没有完成(该项目仍然很脏),它已经为另一个项目调用了 store.commit(),抛出了这个错误:

错误:在状态 rootState.deleted.uncommitted 时尝试处理deleteRecordApp.Item:ember6954:f6a1c932-2db0-4933-7c92-69fbd3838229> 上的事件。未定义调用

我已经尝试将此代码放在 RunLoop 或 Transaction 中,但没有任何效果。

有什么线索吗?:)

4

2 回答 2

2

您可以尝试不同的方法,例如在didDelete触发记录事件之前禁用您的按钮。

例子:

  removeLastItem: ->
    # get the reference to your button and disable it
    lastItem = current_order.get('items').get('lastObject')
    lastItem.deleteRecord()
    lastItem.on 'didDelete', =>
      # reenable your button again

    lastItem.on 'becameError', =>
      # reenable your button again and notify user?

    App.store.commit()

有关模型生命周期和您可以收听的所有事件的信息,请参见此处。

希望能帮助到你。

于 2013-06-20T18:21:36.160 回答
0

我发现了另一种非常简单的方法。

这篇博文中,他们注意到我们可以只使用ember-data model-cycle flags

所以我们可以在我们的模板中使用这个代码(假设模板是 user.emblem)

if isSaving
  = will show this if some crud action is performing on the user ercord
else
  = good stuff
于 2013-07-01T16:16:28.077 回答