2015-09-11 66 views
0

首先,我對Backbone的瞭解非常有限,現在我試圖將一個實現添加到一些我沒有創建的代碼中。Backbone對同步的響應

我的問題是:

我有正在上點擊按鈕呈現的集合。現在,我們在網站上設置了一些權限,以便有時我得到的響應是401.

我目前能夠得到響應,問題是我不知道如何將它連接到同步事件,所以如果我在調用API時得到401,它不應該渲染任何東西。

,我覺得看代碼將有助於澄清我的問題:

this.addressBook = new (Backbone.Collection.extend({ 
     url: url, 
     model: Backbone.Model.extend({ 
      idAttribute: 'ID' 
     }), 

     parse: function(data) { 

      return data; 
     } 
}))(); 

    this.addressBook.on('sync', this.renderAddresses, this); 
    this.addressBook.fetch(); 

所以我找到了一些方法來獲得從獲取狀態代碼,但在這種特殊情況下,我需要得到的StatusCode在sync事件調用this.renderAddress之前,並給出響應的狀態,繼續並呈現我的視圖,或者只是顯示一條消息,指出訪問被拒絕。

對不起,如果我不夠清楚。

在此先感謝。

回答

1

首先,您需要爲您的地址簿提取定義一些回調選項。對於您要完成的任務,您需要提供錯誤回調。

this.addressBook.fetch({ 
error: function(xhr) { 
    if(xhr.status == 401) { // Put logic you want in the case of 401 here... 
} 
}); 

聲明:我沒有測試過這段代碼,因爲我沒有方便的方法來重現這個問題。

我相信它的工作原理是因爲Backbone將jQuery xhr Object傳遞給它的錯誤回調函數。 http://backbonejs.org/#Model-fetch

2

這裏是骨幹文檔的突出部分:

每當一個模型或收集開始與服務器同步的「請求」的事件被髮射。如果請求成功完成,您將得到一個「同步」事件,如果不是,則會出現「錯誤」事件。

這意味着sync事件不應該觸發,如果你得到一個401,而應該觸發error事件。

您可以通過聽各種不同的活動測試這個在你的代碼(包括所有可用的參數):

this.listenTo(yourCollection, 'request', function(collection, resp, options) { 
    console.log('Request: ', resp); 
}); 
this.listenTo(yourCollection, 'error', function(collection, resp, options) { 
    console.log('Error: ', resp); 
}); 
this.listenTo(yourCollection, 'sync', function(collection, resp, options) { 
    console.log('Sync: ', resp); 
}); 

所以,你應該能夠只聽error事件來顯示您的自定義錯誤消息:

this.listenTo(yourCollection, 'error', function(collection, resp) { 
    if (resp.status === 401) { 
    console.warn('401: Unauthorized'); 
    } else { 
    // do something else 
    } 
}); 
+0

謝謝。 我也嘗試過這種方法。經過幾天的爭論後,我發現我所面對的問題不得不採用引導方式而不是骨幹網。我試圖阻止我的視圖(如果我得到了401)的視圖的渲染(如果我得到了401)。我在這兩天沒有注意到的是該模式是由bootstrap獨立解僱的,並且與我無關渲染。因此,我試圖以多種方式捕捉錯誤,無法阻止模式打開...在任何情況下,現在我改變了邏輯,以便手動打開模式,如果我沒有得到401。 –