In my application I have a list of items, and a button to delete the last one. Then on my controller I wrote the following action:
removeLastItem: ->
lastItem = current_order.get('items').get('lastObject')
lastItem.deleteRecord()
App.store.commit()
My issue comes when I keep clicking on my button too fast. At some point it seems that while
the store.commit() has not finished (the item stills dirty), it is already calling the store.commit() for another item, throwing this error:
Error: Attempted to handle event deleteRecord
on
App.Item:ember6954:f6a1c932-2db0-4933-7c92-69fbd3838229> while
in state rootState.deleted.uncommitted. Called with undefined
I already tried to put this code inside a RunLoop or a Transaction, but nothing worked.
Any clues ? :)
You could try a different approach, like for example disabling your button until the record's didDelete
event is fired.
Example:
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()
See here for info on the model lifecycle and all the events you can listen to.
Hope it helps.
I found another very-simple-approach.
In this blog post they notice that we could just use the ember-data model-cycle flags.
So we could just use this code in our template (suppose the template is user.emblem)
if isSaving
= will show this if some crud action is performing on the user ercord
else
= good stuff