Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 如何触发model.save()上的成功回调?_Backbone.js - Fatal编程技术网

Backbone.js 如何触发model.save()上的成功回调?

Backbone.js 如何触发model.save()上的成功回调?,backbone.js,Backbone.js,模型已正确发布到处理保存的服务器,但未触发成功回调。是否需要从服务器发回内容?保存的第一个参数是要保存在模型上的属性: this.model.save({ success: function(model, response){ console.log('success'); }, error: function(){ console.log('error'); } }) 所以我有点困惑-我还需要传递所有属性才能调用保存事件吗?如果我的模型很大怎么办。。我不希望手

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

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

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

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

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

this.model.save( {att1 : "value"}, {success :handler1, error: handler2});
this.model.save([],{
 dataType:"text",
 success:function() {},
 error:function() {}
});
好的,为了回答我自己的问题,万一有人找到这篇文章,我做了以下工作:

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

但是您不必设置id:
this.model.get('id')
您只需传递一个空白对象,因为空白属性不会扩展属性,不会执行任何操作:

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

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

this.model.save({}, {
    success: function (model, response) {
        console.log("success");
    },
    error: function (model, response) {
        console.log("error");
    }
});
不知什么原因,上述方法对我都不起作用。在我的例子中,api只是没有命中

但后来在搜索时,我遇到了一个问题,有人尝试将
null
而不是
{}
作为第一个参数

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

所以,这对我来说很有效。希望这对您也有帮助。

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

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


Roy M J

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

如果要成功,服务器没有返回JSON对象,请使用数据类型:“text”选项执行保存,如下所示:

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

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

对于希望保存模型而不更新属性的用户,可以执行以下操作:

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

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


这样,无论何时运行此.model.save(),如果同步成功,它都会以回调的形式运行onSaveSuccess函数

结果表明我做错了:正确的语法应该是:This.model.save(newItem,{success:…,error:})'null'似乎也可以用作占位符。@UpTheCreek谢谢。这很有帮助。我查看了源代码并传递了一个空字符串作为键和值。不过,我更喜欢你的方法。@UpTheCreek null由于某种原因对我不起作用,但传递了一个空的attr obj:)我有点困惑-(1)我认为主干在保存期间总是将整个模型发回(不可能发送部分模型更新)。那么属性名值的用途是什么呢?(2) 如果您只想在执行一些.set()之后保存模型,该怎么办?为什么要保存属性列表?(3) 在文档中,属性列表参数显示为可选。你能澄清一下吗?谢谢。你可以用你的属性进行一系列的“设置”,然后不使用任何属性进行保存。模型的所有属性始终发送到服务器。“使用属性保存”只是设置+保存的快捷方式。虽然这看起来很愚蠢,但遗憾的是,它的文档记录得很差。在我的测试中,如果不传递“属性”参数的某些内容,则不会触发成功和错误回调。这似乎与文档相矛盾。。。save([attributes]、[options])将指示属性是可选的。当我包含属性或属性为null时,将触发成功和错误回调。当我没有为属性包含任何内容时,不会触发回调。检查了backbone.js[]的源代码。似乎attr是强制性的。。如果只提供了“选项”,则函数会假定它是“attr”,并将调用搞乱这是正确的答案。如果你传入null,主干将把所有属性发送到服务器进行保存。奇怪的怪癖,但我选择的方法。真糟糕,谢谢你。这让我发疯。如果这被记录在主干文档的某个地方,那就太棒了,这救了我的命。我在Express 4中使用了res.json({success:result}),这仍然给我带来了问题。也许我需要做:res.json({“success”:“result”})或其他什么……非常感谢!这让我很开心。把一个本地
模型
传给一个
这个.model
,有点分心<代码>模型应该是
属性
,这些属性与
此中的所有内容一起设置和保存。模型
@Funkodebat:Yes。。我实际上认为这类似于普通的jQueryAjax,但在主干中,第一个参数是模型。不一定通过它,而是得到相应的一个。这确实令人不安:(事实是,不,调用save时没有传递模型。save的第一个参数是在调用save之前可以设置的额外属性。这就像调用
model.set(model.toJSON());model.save()一样)
。没有理由将模型设置为模型设置为的值。。保存时将模型传递给自己是多余的。@Funkodebat我拒绝了您对这个3年前的答案所做的更改,因为它们彻底改变了作者的回答。这不是编辑/审核系统的意图。如果答案不再相关或适当的投票,然后写一个新的。审核工具用于修正语法、格式、拼写和大写,而不是调整其他用户的答案。社区会不同意你的意见。这是一个投票率很高的问题,答案最高。该问题似乎与社区相关。如果你不同意任何东西都可以使用“向下投票”按钮。这不是你决定哪些问题和答案有权出现在本网站上的地方,当然也不是你修改其他用户答案的地方,因为他们的意思是完全正确的