Backbone model.destroy () invocando a função de retorno de chamada de erro mesmo quando funciona be
Eu tenho um Backbone.js modelo que estou tentando destruir quando o usuário clica em um link na visualização do modelo. A visualização é algo assim (pseudocódigo porque é implementado em CoffeeScript, que pode ser encontrado na parte inferior da pergunta
var window.ListingSaveView = Backbone.View.extend({
events: {
'click a.delete': 'onDestroy'
},
onDestroy: function(event){
event.preventDefault();
this.model.destroy({
success: function(model, response){
console.log "Success";
},
error: function(model, response){
console.log "Error";
}
});
}
});
Quando clico nodelete
no navegador, sempre receboError
logado no console, mesmo que meu servidor registre a destruição bem-sucedida do registro do banco de dados associado e retorne uma resposta de 200. Quando atualizo a página (fazendo com que a coleção seja renderizada novamente a partir do banco de dados), o modelo que eu excluí desaparec
Um interessante é que, quando eu registro oresponse
no retorno de chamada de erro, possui statuscode200
indicando sucesso, mas também informastatusText: "parseerror"
o que isso significa. Não há erro nos logs do meu servidor.
O que estou fazendo de errado
Esta é a resposta do servidor:
Object
abort: function ( statusText ) {
always: function () {
complete: function () {
done: function () {
error: function () {
fail: function () {
getAllResponseHeaders: function () {
getResponseHeader: function ( key ) {
isRejected: function () {
isResolved: function () {
overrideMimeType: function ( type ) {
pipe: function ( fnDone, fnFail ) {
promise: function ( obj ) {
readyState: 4
responseText: " "
setRequestHeader: function ( name, value ) {
status: 200
statusCode: function ( map ) {
statusText: "parsererror"
success: function () {
then: function ( doneCallbacks, failCallbacks ) {
__proto__: Object
qui está a ação do servidor que destrói interage com (Ruby on Rails)
# DELETE /team/listing_saves/1.json
def destroy
@save = current_user.team.listing_saves.find(params[:id])
@save.destroy
respond_to do |format|
format.json { head :ok }
end
end
E aqui está a implementação real do CoffeeScript da Backbone View para pessoas que preferem assim:
class MoveOutOrg.Views.ListingSaveView extends Backbone.View
tagName: 'li'
className: 'listing_save'
template: JST['backbone/templates/listing_save']
events:
'click a.delete_saved': 'onDestroy'
initialize: ->
@model.bind 'change', this.render
render: =>
renderedContent = @template(@model.toJSON())
$(@el).html(renderedContent)
this
onDestroy: (event) ->
event.preventDefault() # stop the hash being added to the URL
console.log "Listing Destroyed"
@model.destroy
success: (model, response)->
console.log "Success"
console.log model
console.log response
error: (model, response) ->
console.log "Error"
console.log model # this is the ListingSave model
console.log response