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