The callback for editDialogOpen doesn’t correctly reference the _editDialog parameter using the ‘that’ prefix.
The first time the callback is called the local variable _editDialog works, but subsequent calls it becomes undefined; the fix is to use the global class scoped variable that._editDialog.
To get around this without modifying the source code do something like this:
editDialogOpen: function(dialog, appointment){
if ( dialog || (dialog = this._editDialog) ) {
....
}
}