在我的应用程序中,我有一个项目列表,以及一个删除最后一个项目的按钮。然后在我的控制器上我写了以下动作:
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中,但没有任何效果。
任何线索? :)
答案 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