如何在model.save()上触发成功回调?

时间:2011-04-22 16:25:13

标签: backbone.js

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

模型已正确发布到处理保存的服务器,但未触发成功回调。我是否需要从服务器发回一些东西?

8 个答案:

答案 0 :(得分:123)

save的第一个参数是要保存在模型上的属性:

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

答案 1 :(得分:58)

对于某些未知的原因,上述方法都不适用于我。在我的情况下,api没有被击中。

但是稍后在搜索时,我碰到了this link,其中有些人尝试null而不是{}作为第一个参数。

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

所以,这对我有用。希望这对你也有帮助。

答案 2 :(得分:37)

您的服务器必须返回JSON对象。如果响应不是JSON对象,则不会触发回调。

如果为了成功,您的服务器不会返回JSON对象,请使用 dataType:“text”选项执行保存,如下所示:

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

使用此选项,它不会等待响应中的JSON,而是等待文本,因此将启动回调。

答案 3 :(得分:11)

您可以使用下划线lib,因为骨干已经取决于此。请记住,save的第一个参数必须具有属性,或者您可以只传递{},以防您想要保存模型本身。

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

答案 4 :(得分:8)

所以我有点困惑 - 我还需要传递所有属性才能让我调用保存事件吗?如果我的模型很大...我不希望手动设置每个属性

我正在调用model.save并尝试执行以下操作:

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

好的只是回答我自己的问题,如果有人发现这篇文章,我做了以下工作:

this.model.save({ id: this.model.get('id') },
    {
        success: function (model, response) {
            console.log("success");
        },
        error: function (model, response) {
            console.log("error");
        }
    });
编辑:我出于某种原因无法回复你,但我可以编辑

但你不必设置id:this.model.get('id')你可以传递一个空白对象,因为空白属性不会扩展属性,什么都不做:

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

答案 5 :(得分:4)

以下是我用于骨干模型保存的代码。

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

干杯

Roy M J

答案 6 :(得分:1)

对于那些想要保存模型而不更新属性的人,您可以执行以下操作:

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

答案 7 :(得分:1)

在初始化函数中,将sync方法绑定到您定义的方法(onSaveSuccess)

            initialize: function (options) {
                    this.model.on('sync', _.bind(this.onSaveSuccess, this));
},
            onSaveSuccess: function() {
                console.log('saved');
                this.render();
            },

这样,无论何时运行this.model.save(),如果同步成功,它都会将onSaveSuccess函数作为回调运行