0

Backgrid.js および Backbone-pageable でページング機能を使用しているときに、リクエストでカスタム ヘッダーをプッシュするのに問題があります。

最初のリクエストは、xhr.setRequestHeader を使用して設定されたカスタム ヘッダーでデータを正しく取得しています。

バックグリッドからの後続のすべてのリクエストでカスタム ヘッダーも送信するにはどうすればよいですか?

var MyCollection = Backbone.PageableCollection.extend({
        url: "http://api.myurl.com",
        // Initial pagination states
        state: {
            pageSize: 10,
            sortKey: "updated_at",
            order: 1
        },
        queryParams: {
            firstPage: 0,
            totalPages: null,
            totalRecords: null,
            sortKey: "sort",
            q: "state:active"
        },
        parseState: function (resp, queryParams, state, options) {
            return {totalRecords: resp.responseData.total_count};
        },
        parseRecords: function (resp, options) {
            return resp.responseData.items;
            console.log(options);
        }
    });
    var mycollection = new MyCollection();
    var grid = new Backgrid.Grid({
        columns: columns,
        collection: mycollection
    });
    // Render the grid and attach the root to your HTML document
    var $datagrid = $("#paginator-example-result");  
    $datagrid.append(grid.render().$el);

    var paginator = new Backgrid.Extension.Paginator({
        collection: mycollection
    });
    var myCustomRequestHeader = "ABCDEFG";
    // Render the paginator
    $datagrid.append(paginator.render().$el);
    mycollection.fetch({reset: true, beforeSend: function(xhr){ xhr.setRequestHeader('X-Cust-Request-Header', myCustomRequestHeader); }, type: 'POST'}); // This works as expected, the custom header is set in the first request

前もって感謝します!

編集、以下のジョン・モーゼスの回答に基づいて、これは作業スニペットです:

var MyCollection = Backbone.PageableCollection.extend({
    ...
    sync: function(method, model, options){
        options.beforeSend = function(xhr){ xhr.setRequestHeader('X-Cust-Request-Header', myCustomRequestHeader);};
        return Backbone.sync(method, model, options);
    }
...
});
4

1 に答える 1

1

MyCollection の sync メソッドをオーバーライドします。

var MyCollection = Backbone.PageableCollection.extend({
...
sync: function(method, model, options){
    options.beforeSend: function(xhr){ xhr.setRequestHeader('X-Cust-Request-Header', myCustomRequestHeader);
    return Backbone.sync(method, model, options);
}
...
});
于 2014-02-07T13:06:46.090 に答える