J'ai un Backbone.js le modèle que je suis en train de détruire lorsque l'utilisateur clique sur un lien dans le modèle de vue. La vue est quelque chose comme ceci (pseudocode parce qu'il est mis en œuvre en CoffeeScript qui peut être trouvé au bas de la question).
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";
}
});
}
});
Lorsque je clique sur l' delete
lien dans le navigateur, j'ai toujours Error
connecté à la console, même si mes enregistrements de serveur de succès de la destruction de l'enregistrement de base de données et renvoie une réponse 200. Lorsque j'actualise la page (provoquant de la collection, afin de rendre à nouveau à partir de la DB), le modèle que j'ai supprimé aura disparu.
Un intéressant c'est que lorsque je connecte l' response
dans l'erreur de rappel, il a statuscode 200
indiquant la réussite mais aussi les rapports d' statusText: "parseerror"
quoi que cela signifie. Il n'y a pas d'erreur dans mes logs du serveur.
Ce que je fais mal?
C'est la réponse du serveur:
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
Ici, c'est le serveur d'action qui détruisent interagit avec (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
Et ici, c'est le réel CoffeeScript mise en œuvre de l'épine Dorsale de la Vue pour les personnes qui le préfère comme ça:
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