web-dev-qa-db-de.com

Wie löse ich den Erfolgsrückruf bei einem model.save () aus?

this.model.save({
  success: function(model, response){
    console.log('success');
  },
  error: function(){
    console.log('error');
  }
})

Das Modell wird korrekt auf dem Server bereitgestellt, der das Speichern durchführt, aber der erfolgreiche Rückruf wird nicht ausgelöst. Muss ich etwas vom Server zurücksenden?

106
Running Turtle

Das erste Argument von save sind die Attribute, die im Modell gespeichert werden sollen:

this.model.save( {att1 : "value"}, {success :handler1, error: handler2});
122
Julien

Aus irgendeinem unbekannten Grund hat keine der oben genannten Methoden für mich funktioniert. Die API wurde nur in meinem Fall nicht getroffen.

Aber später bei der Suche stieß ich auf diesen Link , wo jemand versucht hatte null anstelle von {} als erster Parameter.

this.model.save(null, {
    success: function (model, response) {
        console.log("success");
    },
    error: function (model, response) {
        console.log("error");
    }
});

also, das hat bei mir funktioniert. Hoffe das hilft dir auch.

58
Yasser

Ihr Server muss ein JSON-Objekt zurückgeben. Wenn die Antwort kein JSON-Objekt ist, werden die Rückrufe nicht ausgelöst.

Wenn Ihr Server aus Gründen des Erfolgs kein JSON-Objekt zurückgibt, führen Sie einen Speichervorgang mit der Option dataType: "text" wie folgt aus:

this.model.save([],{
 dataType:"text",
 success:function() {},
 error:function() {}
});

Mit dieser Option wird nicht auf eine JSON-Antwort gewartet, sondern ein Text und somit der Rückruf gestartet.

37
Igor G.

Sie können die Unterstreichungslib wie folgt verwenden, da das Backbone bereits davon abhängt. Denken Sie daran, dass das erste Argument von save entweder Attribute haben muss, oder Sie übergeben einfach {}, wenn Sie das Modell selbst speichern möchten.

this.model.save({}, _.bind(function(model, response){
  //Do whatever you want e.g.
  this.collection.add(model)
}, this))
11

ich bin also ein wenig verwirrt. Muss ich noch alle Attribute übergeben, um ein Save-Ereignis aufzurufen? Was ist, wenn mein Modell groß ist? Ich möchte nicht jede Eigenschaft manuell einstellen

ich rufe model.save auf und versuche Folgendes zu tun:

this.model.save(
    {
        success: function (model, response) {
            console.log('model saved');
        }
    });

oK, nur um meine eigene Frage zu beantworten, falls jemand diesen Beitrag findet, habe ich folgendes gemacht, was funktioniert:

this.model.save({ id: this.model.get('id') },
    {
        success: function (model, response) {
            console.log("success");
        },
        error: function (model, response) {
            console.log("error");
        }
    });

EDIT: Ich konnte Ihnen aus irgendeinem Grund nicht antworten, aber ich kann bearbeiten

sie müssen jedoch nicht id: this.model.get('id') festlegen. Sie können einfach ein leeres Objekt übergeben, da ein leeres Attribut die Attribute einfach nicht erweitert und nichts bewirkt:

this.model.save({}, {
    success: function (model, response) {
        console.log("success");
    },
    error: function (model, response) {
        console.log("error");
    }
});
8
nologo

Das Folgende ist der Code, den ich für das Speichern des Backbone-Modells verwende.

this.model.save(model,{
   success:function(model){
       console.log("Saved Successfully");
   },
   error:function(model){
       console.log("Error");
   }
});

Prost

Roy M J

4
Roy M J

Für diejenigen, die ein Modell speichern möchten, ohne die Attribute zu aktualisieren, haben Sie folgende Möglichkeiten:

model.once("sync", function(model, response, options){
    //
});
model.once("error", function(model, response, options){
    //
});
model.save();
1
timborden