在Ember中调用App.store.commit()的速度太快了

时间:2013-06-20 16:24:50

标签: ember.js commit ember-data

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

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

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

  

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

调用

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

任何线索? :)

2 个答案:

答案 0 :(得分: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()

有关模型生命周期和您可以收听的所有事件的信息,请参阅here

希望它有所帮助。

答案 1 :(得分:0)

我找到了另一个非常简单的方法。

this blog post中,他们注意到我们可以使用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