【问题标题】:Yui Datatable with AutoComplete and Pagination带有自动完成和分页功能的 Yui 数据表
【发布时间】:2009-11-25 15:23:30
【问题描述】:

我尝试了解如何将服务器端分页用于动态数据(我参见示例:http://developer.yahoo.com/yui/examples/datatable/dt_dynamicdata.html)。

我的问题是我无法自定义我的请求,当我尝试分页时,我的请求是: qct-list.htmlsort=geneid&dir=asc&startIndex=50&result=25

请求应采用以下格式: qct-list.html?name=cd4&symbol=cd4&start=0&limit=25 或 qct-list.html?name=cd4&symbol=cd4&start=25&limit=50 ...

这是我的代码的副本(部分):

        var myColumnDefs = [
            {key:"geneid", label:"Gene", sortable:true},
            {key:"name", label:"Name", sortable:true},
            {key:"symbol", label:"Symbol", sortable:true},
            {key:"lastupdated", label:"Last Updated", formatter:"date", sortable:true},
            {key:"lastmodified", label:"Last Modified", formatter:"date", sortable:true}
        ];

        var myDataSource = new YAHOO.util.DataSource("qct-list.html");
        myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        myDataSource.connXhrMode = "queueRequests";
        myDataSource.responseSchema = {
            resultsList: "geneItemList",
            fields: ["col","qv","limit","start","geneid","name","symbol","lastupdated","lastmodified"],
            metaFields: {
                    totalRecords: "totalRecords" // Access to value in the server response
                }
        };

        var qctPaginator = new YAHOO.widget.Paginator({
            rowsPerPage: 25,
            totalRecords : YAHOO.widget.Paginator.VALUE_UNLIMITED,
            template: YAHOO.widget.Paginator.TEMPLATE_ROWS_PER_PAGE,
            rowsPerPageOptions: [25,50,75,100]
                        });

        var myRequestBuilder = function(ostate, oSelf) {
            oState = oState || {pagination:null};
            var name = Dom.get('dt_input_name').value;
            var symbol = Dom.get('dt_input_symbol').value;
            var start = (oState.pagination) ? oState.pagination.recordOffset : 0;
            var limit = (oState.pagination) ? oState.pagination.rowsPerPage : 25;
            return  "?name=" + name + "&symbol"+ symbol + "&start=" + start + "&limit=" + limit;
        }

        var oConfigs = {
            dynamicData: true, // Enables dynamic server-driven data
            selectionMode: "single",
            paginator: qctPaginator ,
            generateRequest : myRequestBuilder,
            paginationEventHandler : YAHOO.widget.DataTable.handleDataSourcePagination,
            initialRequest: "?name=&symbol=&start=0&limit="
        };

        var myGeneListTable = new YAHOO.widget.DataTable("geneListTable", myColumnDefs, myDataSource, oConfigs);

        myGeneListTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
            oPayload.totalRecords = oResponse.meta.totalRecords;
            return oPayload;
        }

有人可以解释如何使用 DataTable 的分页以及如何个性化请求吗?

【问题讨论】:

    标签: javascript yui pagination yui-datatable


    【解决方案1】:

    我几乎设法让它成为我的分页。 我的 RequestBuilder 现在工作正常,我得到了我需要的请求: qct-list.html?name=interferon&symbol=&start=25&limit=25

    这里是新代码:

    var myColumnDefs = [
     {key:"geneid", label:"Gene", sortable:true},
     {key:"name", label:"Name", sortable:true},
     {key:"symbol", label:"Symbol", sortable:true},
     {key:"lastupdated", label:"Last Updated", formatter:"date", sortable:true},
     {key:"lastmodified", label:"Last Modified", formatter:"date", sortable:true}
    ];
    
    var myDataSource = new YAHOO.util.DataSource("qct-list.html");
     myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
     myDataSource.connXhrMode = "queueRequests";
     myDataSource.responseSchema = {
     resultsList: "geneItemList",
     fields: ["col","qv","limit","start","geneid","name","symbol","lastupdated","lastmodified"],
     metaFields: {
                        totalRecords: "totalRecords" // Access to value in the server response
                    }
    };
    
    var qctPaginator = new YAHOO.widget.Paginator({
        rowsPerPage: 25,
        rowsPerPageOptions: [25,50,75,100]
        });
    
    var myRequestBuilder = function(oState,oSelf)
    {
     oState = oState || {pagination:null, sortedBy:null};
     // var sort = (oState.sortedBy) ? oState.sortedBy.key : "geneid";
     // var dir = (oState.sortedBy && oState.sortedBy.dir === YAHOO.widget.DataTable.CLASS_DESC) ? "desc" : "asc";
        var start = (oState.pagination != null) ? oState.pagination.recordOffset : 0;
        var limit = (oState.pagination != null) ? oState.pagination.rowsPerPage : 25;
        var name = Dom.get('dt_input_name').value || "";
        var symbol = Dom.get('dt_input_symbol').value || "";
    
        return '?name='+ name + '&symbol=' + symbol + '&start='+ start + '&limit=' + limit;
    
    }
    
    var oConfigs = {
      initialRequest: "?name=interferon&symbol=&start=&limit=",
      dynamicData: true, // Enables dynamic server-driven data
      selectionMode: "single",
      paginator: qctPaginator,
      generateRequest : myRequestBuilder
    };
    
    var myGeneListTable = new YAHOO.widget.DataTable("geneListTable", myColumnDefs, myDataSource, oConfigs);
    
     myGeneListTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
    
        if (oPayload == undefined) {
            oPayload = {};  
        }
        oPayload.totalRecords = oResponse.meta.totalRecords;
        return oPayload;
     }
    

    【讨论】:

    • 不幸的是,我得到了一个错误: I[T] is undefined [Break on this error] if(L){return this.getLastTdEl(L);}}}retu...= =D.CLASS_ASC)?D.CLASS_DESC:D.CLASS_ASC;关于这个错误的想法?我发现了我的错误。问题来自我的控制器。在第一次请求时一切顺利,但是当我使用分页时,我的控制器修改了 totalRecords(并返回与 rowsPerPage 相同的值)。这会产生上述错误...
    • 我修复了这个错误。现在我的控制器为每个查询返回相同的 totalRecords。一切都很好。
    【解决方案2】:

    我认为您需要交换 oConfigs 和 myRequestBuilder 的声明,以便

    var myRequestBuilder = ...
    
    var oConfigs = ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      相关资源
      最近更新 更多