簡體   English   中英

編輯Backbone Ajax成功方法以添加自定義錯誤處理

[英]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

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM