2012-06-16 140 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);