Вопрос

Я пытаюсь понять, как использовать разбиение на страницы на стороне сервера для динамических данных (я вижу пример: http://developer.yahoo.com/yui/examples/datatable/dt_dynamicdata.html ).

Моя проблема в том, что я не могу настроить свой запрос, когда я пытаюсь разбить на страницы, мой запрос: ККТ-list.htmlsort = geneid & амп; DIR = возрастанию & амп; StartIndex = 50 & амп; Результат = 25

Запрос должен быть в следующей форме: qct-list.html? name = cd4 & amp; symbol = cd4 & amp; start = 0 & limit = 25 или qct-list.html? name = cd4 & amp; 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 и как персонализировать запрос?

Это было полезно?

Решение

Мне почти удалось заставить его работать на моей нумерации страниц. Мой RequestBuilder теперь работает нормально, я получаю запрос, который мне нужен: ? ККТ-list.html имя = интерферон & Amp; символ = & Amp; начать = 25 & амп; предел = 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;
 }

Другие советы

Я думаю, вам нужно поменять местами объявление oConfigs и мой RequestBuilder, чтобы

var myRequestBuilder = ...

var oConfigs = ...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top