1

嘿,

我们正在使用backbone.paginatorbackgrid; backgrid-filter; backgrid-paginator它工作得很好我们在尝试server side mode按一个(或多个)列排序时遇到小问题

对于服务器端 with 正在使用Springwithorg.springframework.data.web.PageableHandlerMethodArgumentResolver

在调试应用程序时,似乎order从客户端在 spring 端没有得到很好的解析,它落到了default value

两个问题:

  1. 有谁知道应该发送到什么参数PageableHandlerMethodArgumentResolver
  2. Backbone.PageableCollection为了实现这一目标,如何进行调整?

谢谢,橡树





我们的初始化分页器代码

   Backbone.PageableCollection.extend({
            state : {
                pageSize : 15,
                firstPage : 0, /* Spring paging is 0-based */
            },

            mode : "server",
        
            /**
             * override default queryParams to fit spring pageable var names
             */
            queryParams : {
                    pageSize:"size",
                    totalRecords:"totalElements",
                    sortKey:"sort",
                    order:"sort_order",
                    directions  : { "-1": "asc", "1": "desc" }
            },
  })

PS:

似乎spring期望将as 数组用常规data分隔。comma知道怎么做backbone.paginator吗?或如何更改 spring 以能够解析分页器以支持几个`排序参数

4

1 回答 1

1

在对 Spring 源代码PageableHandlerMethodArgumentResolverSortHandlerMethodArgumentResolver.java(可以在此处找到)进行了一些挖掘之后,似乎 Spring 期望排序参数的格式为

sort="column1,column2,column3...,order"&sort="column4,column5,...,order"

似乎backbone.paginator不支持多重排序,但为了paginator支持 单次SortHandlerMethodArgumentResolver排序,可以覆盖sync函数来设置变量。

例子

var sync = Backbone.PageableCollection.prototype.sync;

Backbone.PageableCollection.prototype.sync = function(method, model,
        options) {
    options.type = 'POST' // this help with unicode on tomcat and can be removed..

    /**
     * @override sync Add some code to support parsing of sorting parameters
     *           by SortHandlerMethodArgumentResolver
     */
    if (!options.data) {
        sync.apply(this, arguments)
    }

    var sortKey = _.result(this.queryParams,"sortKey");

    if (!sortKey in options.data) {
        sync.apply(this, arguments)
    }

    options.data[STR_SPRING_SORT] = options.data[sortKey]
    var orderKey = _.result(this.queryParams,"order");

    var STR_SPRING_SORT = "sort";
    var STR_SEPERATOR = ",";

    if (orderKey  in options.data) {
        options.data[STR_SPRING_SORT] = options.data[STR_SPRING_SORT] + STR_SEPERATOR
                + options.data[orderKey]
        if (sortKey !== STR_SPRING_SORT) {
            delete options.data[sortKey];
        }

        delete options.data["order"];
    }

    sync.apply(this, arguments);

};

评论

comma可以强制弹簧改变sort弦。

于 2015-03-03T08:26:26.790 回答