Ho un modello Backbone.js che sto cercando di distruggere quando l'utente fa clic su un collegamento nella vista del modello. La vista è simile a questa (pseudocodice perché è implementata in CoffeeScript che può essere trovata in fondo alla domanda).Backbone model.destroy() che richiama la funzione di callback degli errori anche quando funziona correttamente?
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 clicco il link delete
nel browser, ho sempre arrivare Error
registrato alla console anche se i miei record dei server di distruzione di successo del record del database associato e restituisce una risposta 200. Quando aggiorno la pagina (causando il re-rendering della raccolta dal DB) il modello che ho eliminato sarà scomparso.
Un interessante questo è che quando accedo il response
nella richiamata errore, ha StatusCode 200
che indica il successo, ma anche i rapporti statusText: "parseerror"
qualunque cosa ciò significhi. Non c'è nessun errore nei miei log del server.
Cosa sto sbagliando?
Questa è la risposta dal server:
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
Ecco l'azione del server che distruggono interagisce con (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 qui è l'implementazione effettiva CoffeeScript della spina dorsale Visualizza per le persone che lo preferiscono:
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
Puoi incollare tutto ciò che il server invia indietro (usa firebug o qualcosa per aprire la risposta), se non altro? – Stephen
Modificato la mia domanda per includere la risposta –
Oh. Bene, per essere sinceri .. questa non è una risposta valida. È molto probabile che ascolti una risposta JSON ... e in un modo o nell'altro non la stai dando. Non riesco a ricordare quello che usiamo al lavoro per i binari, ma è qualcosa come to_json, non solo 'json' (non sono un esperto di rubini .. o anche un novizio .. quindi non posso fare a meno di farlo) – Stephen