3

値が変更されると、listingListViewコレクションのフェッチをトリガーするテキスト入力要素がいくつかあります。コレクションは、次に示すように、関数を介して新しいデータでlistingCollection更新されます。PHP/Codeigniterを使用してRESTfulAPIを公開しています。listingListViewlistingListView.refreshList

問題:から取得した結果がある場合は、すべて正常に機能します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();
    }
});
4

3 に答える 3

3

バックボーンは、「同期」エラーで「エラー」イベントをトリガーします。ビューでエラーハンドラ関数を作成することで、404エラーをキャッチできます。

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

defaultErrorHandler: function(model, error) {
        console.log('status', error.status);
    }
于 2012-06-17T00:54:30.997 に答える
1

バックボーンでエラーイベントをオーバーロードできます。ただし、サーバーからのREST応答を変更する方がよいでしょう。結果がない場合は、空のJSONオブジェクトで200okを返送します。サーバーからのnullオブジェクトを必ずテストしてください。

于 2012-06-17T09:11:31.600 に答える
0

True、応答を空に設定し、ステータスを200に設定するだけです。

$this->response(NULL, 200);
于 2013-03-24T10:22:50.213 に答える