2012-06-15 10 views
10

Ho un modello di backbone che sto cercando di distruggere, ma nessun parametro viene inviato con la richiesta, quindi il server restituisce un errore "Elimina 404 non trovato".backbone destroy non invia parametri

Ammetto che la mia struttura è un po 'strana poiché sto creando/distruggendo gli elementi in base a se sono già in un elenco o meno.

 
var list_item = new MyApp.Models.ListItem({item_id: this.model.id, group_id: this.model.group_id}); 

    if($(e.currentTarget).hasClass('add')){ 

      list_item.save(list_item, { 
       success: function(response){ 
        this.model.attributes.addedtolist_id = response.id 
        console.log(this.model); 
       }, 
       error: function(){ 
        alert('could not save item'); 
       } 
      }); 
    } else if($(e.currentTarget).hasClass('remove')) { 
     list_item.id=this.model.addedtolist_id; 
     list_item.attributes.id = this.model.addedtolist_id; 
     console.log(list_item); 
     list_item.destroy({ 
      success: function(){ 
       alert('delete'); 
      }, 
      error: function(){ 
       alert('could not uncheck'); 
      } 
    }); 
} 

l'output su console per list_item prima di distruggere è

 
_escapedAttributes: Object 
_previousAttributes: Object 
_setting: false 
attributes: Object 
id: 2 
item_id: 66 
group_id: 64 
__proto__: Object 
cid: "c23" 
id: 2 
__proto__: q 

ma quando guardo le intestazioni inviati con la richiesta di eliminazione, non ho alcun params vengono inviati.

----------------------- i parametri di aggiornamento inviati, 404 ancora restituiti --------------

come da raccomandazione di Yaroslav, ho aggiunto un 'header' al metodo destroy, ma il mio controller delle rotaie sta ancora restituendo un errore DELETE 404 not found. Sto solo cercando di restituire il listino per assicurarmi di ottenere quello giusto prima di distruggerlo.

mio controller è

 
def destroy 
    listitem = Listitem.find(params[:id]) 
    return render :json => listitem 
end 
+0

@muistooshort Ho aggiornato la formattazione e ha aggiunto la parentesi mancante. speriamo sia meglio – pedalpete

+0

Dove ottiene il suo 'id'? Non lo vedo nel 'nuovo ListItem'. E come appare l'URL per la richiesta DELETE? –

+0

Non ha un ID nel 'nuovo ListItem' perché quello è il momento in cui viene creato il listitem, quindi non ha ancora un id. Ecco perché creo l'id prima di 'destroy'. L'URL è 'DELETE http://10.1.1.7:3000/list_items 404 (Non trovato)'. Uso lo stesso URL per l'indice e creo metodi, che funzionano senza problemi. – pedalpete

risposta

29

Direi che si sta impostando il url nel modello per una stringa:

Backbone.Model.extend({ 
    url: '/list_items', 
    //... 
}); 

Questo indicherà a Backbone di usare esattamente /list_items come URL per tutte le azioni. Si consiglia di utilizzare una funzione:

url: function() { return '/list_items/' + encodeURIComponent(this.id) } 

o utilizzare una stringa con urlRoot e lasciare che la funzione predefinita url aggiungere il id:

urlRoot: '/list_items' 
+0

Sì, era l'urlRoot cosa per me! – Stumblor

0
list_item.destroy(**l** { 
    success: function(){ 
    alert('delete'); 
}, ...); 

È quel numero in più uno il problema?

+0

oopps, scusa @jakee, quando non funzionava ho provato 'list_item.destroy (list_item, {success ...', e ho lasciato la l dentro per sbaglio.Questo non è il problema, è stato un tentativo di – pedalpete

2

Quali parametri si prevede di inviare? Destroy esegue solo una richiesta di cancellazione http dall'URL senza corpo o eventuali intestazioni aggiuntive per impostazione predefinita. L'argomento params è pased alla funzione jquery ajax, in modo è possibile specificare le intestazioni c'è:

model.destroy({ 
... 
    headers : { 
     your_header : 123 
    } 
}) 
+0

grazie @Yaroslav, mi aspettavo che l'id fosse inviato come parametro. Ho aggiunto le tue "intestazioni", che ora inviano l'id come parametro, ma sto ancora ottenendo il "DELETE" non trovato – pedalpete

+0

Non sono riuscito a vedere questi parametri lato server (Rails) .Non riesco a trovare molta documentazione sul parametro options di backboe destroy.Puoi aggiungere link? Grazie! – oma

+0

Sfortunatamente ciò non è descritto nella documentazione, scoperto in il codice sorgente – Yaroslav