this.model.save({
success: function(model, response){
console.log('success');
},
error: function(){
console.log('error');
}
})
该模型被正确发布到处理保存的服务器,但成功回调未被触发。我需要从服务器发回一些东西吗?如何在model.save()上触发成功回调?
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});
我有点困惑 - (1)我认为骨干总是在保存期间发回整个模型(这是不可能的发送部分模型更新)。那么属性名称值的目的是什么? (2)如果你只是想在执行一些.set()之后保存模型?为什么属性列表? (3)在文档中,属性列表参数显示为可选。你能澄清吗?谢谢。 – UpTheCreek 2011-09-21 13:19:43
你可以用你的属性做一堆“设置”,然后做一个没有任何属性的保存。模型的所有属性始终发送到服务器。保存属性只是设置+保存的快捷方式。 – Julien 2011-09-23 15:18:11
好的感谢清理我的误解。 – UpTheCreek 2011-09-23 19:08:45
所以我是一个有点困惑 - 我还需要在所有属性传递为了让我打电话给一个保存事件?如果我的模型是大..我不希望设置的每种属性手动
IM调用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");
}
});
您可以使用下划线LIB作为为骨干已经按照取决于此。请记住,保存的第一个参数必须具有属性,否则您可能只需传递{}以防您希望保存模型本身。
this.model.save({}, _.bind(function(model, response){
//Do whatever you want e.g.
this.collection.add(model)
}, this))
this.model(null,[options])仍然可以与Backbone 1.1.0一起使用 – westonplatter 2013-10-24 22:55:49
对于一些未知原因,没有上述方法为我工作。 api只在我的情况下没有受到打击。
但后来当这个搜索,我碰到了this link,其中有人曾试图null
代替{}
作为第一个参数。
this.model.save(null, {
success: function (model, response) {
console.log("success");
},
error: function (model, response) {
console.log("error");
}
});
所以,这为我工作。希望这也能帮助你。
这是正确的答案如果你传入null Backbone会发送所有的属性到服务器保存 – 2013-07-21 22:48:12
奇怪的怪癖,但我选择的方法。 – 2014-10-05 23:17:54
这对我的用例效果最好。谢谢! – 2014-10-20 20:12:08
以下是我用于骨干模型保存的代码。
this.model.save(model,{
success:function(model){
console.log("Saved Successfully");
},
error:function(model){
console.log("Error");
}
});
干杯
罗伊中号Ĵ
它有点分散注意力来传递一个本地'model'到'this.model' ..''模型'应该'属性',这是设置并保存在'this.model'中的所有内容 – Funkodebat 2015-06-08 19:23:56
@Funkodebat:是的。:)我实际上认为这与正常的jquery-ajax类似,但在Backbone中,第一个参数是模型。不一定要通过它,而是得到相应的一个。这真的很令人不安。:( – 2015-06-09 09:05:25
呃,事实是,不,你在调用save的时候并不传递这个模型,save的第一个参数是在调用save之前可以设置的额外属性,它会像调用'model.set(model.toJSON()); model.save()'。没有理由将模型设置为模型设置的模型。在保存模型时,将模型传递给它本身就是多余的缩影。 – Funkodebat 2015-06-09 16:09:51
您的服务器必须返回一个JSON对象。如果响应不是JSON对象,则回调将不会触发。
如果成功您的服务器不返回JSON对象,执行与的dataType保存:“文本”选项,如:
this.model.save([],{
dataType:"text",
success:function() {},
error:function() {}
});
使用该选项将不等待JSON作为回应,但文本,因此回调将启动。
神圣的废话谢谢你。这让我疯狂。如果这被记录在骨干文档的某处,会很棒, – 2015-04-16 04:05:22
这节省了我的屁股。 Express 4使用res.json({success:result}),这仍然给我带来问题。也许我需要做:res.json({“success”:“result”})或其他... – 2015-06-29 19:11:19
对于那些想保存模型,没有更新的属性,你可以做到以下几点:
model.once("sync", function(model, response, options){
//
});
model.once("error", function(model, response, options){
//
});
model.save();
在初始化功能,同步方法绑定到你定义的方法(onSaveSuccess)
initialize: function (options) {
this.model.on('sync', _.bind(this.onSaveSuccess, this));
},
onSaveSuccess: function() {
console.log('saved');
this.render();
},
这样,你运行this.model.save(任何时候),它将运行onSaveSuccess功能的回调,如果您的同步是成功
原来我做错了: 正确的语法应该是:this.model.save(newItem,{success:...,error:...}) – 2011-04-22 18:10:40
'null'似乎也可以用作占位符。 – UpTheCreek 2011-09-21 13:22:36
@UpTheCreek谢谢。这有帮助。我查看了源代码并传递了一个空字符串作为键和值。尽管你的方法更好。 – Pramod 2012-09-20 07:33:38