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年前的答案所做的更改,因为它们彻底改变了作者的回答。这不是编辑/审核系统的意图。如果答案不再相关或适当的投票,然后写一个新的。审核工具用于修正语法、格式、拼写和大写,而不是调整其他用户的答案。社区会不同意你的意见。这是一个投票率很高的问题,答案最高。该问题似乎与社区相关。如果你不同意任何东西都可以使用“向下投票”按钮。这不是你决定哪些问题和答案有权出现在本网站上的地方,当然也不是你修改其他用户答案的地方,因为他们的意思是完全正确的