2012-06-16 139 views
3

我有一些文本輸入元素,當它的值發生變化時,將觸發取回listingListView的集合listingCollection,然後通過功能listingListView.refreshList用新數據更新listingListView,如下所示。我使用PHP/Codeigniter來公開RESTful API。backbone.js如何處理不返回結果的GET請求?

問題:一切工作正常,如果有從fetch()檢索到的結果。但是,如果過濾器沒有返回結果,那麼服務器端和客戶端應該如何處理它?目前Chrome的javascript控制檯顯示404錯誤,並且在網絡選項卡中,XHR請求以紅色突出顯示。所有我想要做的事情返回零結果時,將空白listingListView並顯示一條消息,如(沒有結果返回)而不是在JavaScript控制檯中引發任何錯誤。謝謝!

PHP代碼

function listings_get() { 
    // Get filters 
    $price_min = $this->get('price_min'); 

    $this->load->model('app_model'); 
    $results = $this->app_model->get_listings($price_min); 

    if($results) 
     $this->response($results); 
    else 
     $this->response(NULL); 
} 

JS代碼

window.ListingListView = Backbone.View.extend({ 
    tagName: 'table', 

    initialize: function() { 
     this.model.bind('reset', this.refreshList, this); 
     this.model.bind('add', function(listing) { 
      $(this.el).append(new ListingListItemView({ model: listing }).render().el); 
     }, this); 
    }, 

    render: function() { 
     _.each(this.model.models, function(listing) { 
      $(this.el).append(new ListingListItemView({ model: listing }).render().el); 
     }, this); 
     return this; 
    }, 

    close: function() { 
     $(this.el).unbind(); 
     $(this.el).empty(); 
    }, 

    refreshList: function() { 
     $(this.el).empty(); 
     this.render(); 
    } 
}); 
+0

是listingCollection集合?看起來像你的綁定ListingListView模型? –

回答

3

骨幹觸發的 「同步」 錯誤的 「錯誤」 的事件。您可以通過在視圖中創建錯誤處理函數來捕獲404錯誤。

this.model.on('error',this.defaultErrorHandler,this); 

defaultErrorHandler: function(model, error) { 
     console.log('status', error.status); 
    } 
1

您可以重載主幹中的錯誤事件;儘管從服務器更改REST響應會更好。在沒有結果發回200確定與一個空的JSON對象。一定要從服務器測試一個空對象。

0

真,只需設置響應空的,狀態200:

$this->response(NULL, 200);