[英]Edit Backbone Ajax Success Method to Add in Custom Error Handling
在服務器返回錯誤的情況下,我在主干ajax成功方法中有自己的自定義錯誤代碼。 問題在於此代碼在我的整個應用程序中都重復了,我想在一個地方編輯成功函數,因此我不必在每次ajax成功中都不斷重復此錯誤處理程序。 我想編輯成功函數以包括此錯誤檢查包裝器。 你知道怎么做嗎?
這是我的一種看法,是我成功方法的一個例子:
"success" : function success(model, data)
{
if(data['error'] !== undefined && data['error'].length === 0)
{
message('error', 'Whoops! System Error. Please refresh your page.');
}
else if(data['error'] !== undefined)
{
message('error', data['error']);
}
else
{
//add templates and do stuff here
}
},
理想情況下,我想在某個地方的配置中設置它,然后就可以使用:
"success" : function success(model, data)
{
// add templates and do stuff here
}
這可能嗎? 我嘗試使用ajaxSetup,但這似乎對我不起作用。
更新的代碼仍然無法正常工作:
這確實使我走得更遠,但是錯誤處理程序無法充當包裝器。 數據沒有傳遞到我的ajax調用中。 實際上,我對ajax調用的成功方法根本不再運行。 我在ajax調用中嘗試了console.log(“ some text”),但沒有輸出任何內容。 你知道這是怎么回事嗎?
// Save the original Sync method
defaultSync = Backbone.sync;
//Over ride Backbone async
Backbone.sync = function(method,
model,
options)
{
success = options.success
options.success = function(data)
{
if(data['error'] !== undefined && data['error'].length === 0)
{
message('error', 'Whoops! System Error. Please refresh your page.');
}
else if(data['error'] !== undefined)
{
message('error', data['error']);
}
else
{
success(model,
data);
}
}
return defaultSync(method,
model,
options)
}
有兩種解決方法:
您可以創建自己的自定義模型,該模型繼承自Backbone Model。 您可以在其中覆蓋save方法。 閱讀Backbone文檔,了解如何擴展其模型
在自定義保存方法中,將調用super的save方法,檢查responseText,如果成功,則將調用成功回調。 (請閱讀有關如何在Javascript中調用父模型的方法的骨干文檔)
Backbone具有一個Sync模塊,該模塊基本上默認情況下發出所有ajax請求,解析響應,然后調用在模型上調用save時指定的成功/錯誤回調。 很簡單 看看這個文檔 。 同樣,您可以覆蓋此設置,完全按照Backbone的默認設置進行操作,但僅根據收到的responseText調用成功/錯誤回調。
更新:示例代碼(警告代碼未經測試)
//Over ride Backbone async
defaultSync = Backbone.Sync // Save the original Sync method. We'll be needing that.
Backbone.Sync = function(method, model, options) {
success = options.success
error = options.error
options.success = function(model, data, options) {
if (/% all your custom checks are true */) {
success (model, data, options);
}
else {
error(model,data,options);
}
}
return defaultSync(method, model, options);
}
請確保使用此策略,所有Backbone同步都將覆蓋Sync方法。 如果您不希望這樣做,請使用Model#save覆蓋。
看一下這段代碼 ,其中我重寫了Backbone.Sync以使其與Parse.com API一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.