YUI-2 Datatable:具有服务器端AJAX分页排序的动态列定义

时间:2013-05-03 06:48:16

标签: php yui

我使用以下代码创建带有动态数据(列)的YUI数据表。但我面临着服务器端分页的问题。截至目前,它在客户端分页方面运行良好,但我需要服务器端分页,这样我的页面加载时间就会减少。你能帮我解决这个问题吗?因为我在这个领域过去2天都在苦苦挣扎。用AJAX进行服务器端分页来呈现数据是我的期望。

这是我使用的代码

DataProvider.prototype = {
url:null,
data:null,
ds:null,
getData:function() {return this.data},
initialize:function(){
    var str = generateRequest();
    var newUrl = this.url+str;
    YAHOO.util.Connect.asyncRequest('GET', newUrl, this);
},
success:function(response){
    var responseVal = YAHOO.lang.JSON.parse(response.responseText);
    var columnList = responseVal.columnList;
    var sortedBy = responseVal.sortedBy;
    this.data = responseVal.results;

    if(this.data == '') {
        $('#dynamicdata').html('<font style="color:red;"> No Data Found!</font>');
    } else {
        this.ds = new YAHOO.util.FunctionDataSource(function(){return this.dataProvider.getData()});
        this.ds.responseSchema = {
            resultsList:"results",
            fields:columnList,
            // Access to values in the server response
            metaFields: {
                totalRecords: "totalRecords", 
                startIndex: "startIndex"
            }
        }
        this.ds.dataProvider = this;

        // DataTable configuration
        var myConfigs = {
            paginator: new YAHOO.widget.Paginator({ rowsPerPage:20 }), // Enables pagination 
            width:"80%", height:"auto"
        };

        // FORMATTING CELL COLOUR BASED ON THEIR VALUES
        var myCustomFormatter = function(elLiner, oRecord, oColumn, oData) {    
            var columnKey = oColumn.getKey();
            var frmCurrentPeroid = $('#from').val();
            //var frmCurrentPeroid = '2013-03-13';
            var defaultLabels = ['Product type','Total 1','Total 2','Change'];

            if (isDate(columnKey) && $.inArray(columnKey, defaultLabels) === -1) {

                if(columnKey < frmCurrentPeroid) {
                    YAHOO.util.Dom.addClass(elLiner.parentNode,'orange');
                    elLiner.innerHTML = oData;
                    //alert('blue');
                } else {
                    YAHOO.util.Dom.addClass(elLiner.parentNode,'blue');
                    elLiner.innerHTML = oData;
                }                   
            } else {
                if(columnKey == 'Total 1') {
                    YAHOO.util.Dom.addClass(elLiner.parentNode,'orange');
                    elLiner.innerHTML = oData;
                    //alert('blue');
                }       
                else if(columnKey == 'Total 2') {
                    YAHOO.util.Dom.addClass(elLiner.parentNode,'blue');
                    elLiner.innerHTML = oData;
                    //alert('blue');
                }
                else if(columnKey == 'Change') {
                    split_data = oData.toString().split('_');   
                    var fieldData = null;
                    var fieldFormatter = null;

                    fieldData = split_data[0];
                    fieldFormatter = split_data[1];

                    if(fieldFormatter == 'green') {                     
                        YAHOO.util.Dom.addClass(elLiner.parentNode,'green');
                        elLiner.innerHTML = fieldData;
                    }
                    if(fieldFormatter == 'red') {
                        YAHOO.util.Dom.addClass(elLiner.parentNode,'red');
                        elLiner.innerHTML = fieldData;
                    }
                }
                else if(columnKey == 'Product Name') {
                    var filterStr   = oData.substring(0,30);
                    elLiner.innerHTML = '<a href="..product-detail.php?product_id='+oRecord._oData.product_id+'&height=400&width=850&modal=true" title="'+oData+'" class="thickbox" target="_self">'+filterStr+'</a>';
                    //alert('blue');
                }                               
                else {
                    elLiner.innerHTML = oData;
                }       
            }
        };

        // Add the custom formatter to the shortcuts
        YAHOO.widget.DataTable.Formatter.myCustom = myCustomFormatter;

        //YAHOO.widget.DataTable.formatLink = formatLink;

        /* make call to initialize your table using the data set */
        var myDataTable = new YAHOO.widget.DataTable("dynamicdata", columnList, this.ds, myConfigs);
    }
}

}

按照此页面中发布的代码进行操作 Click here

先谢谢, 拉加

1 个答案:

答案 0 :(得分:0)

我已经有很长一段时间没有做过YUI2所以我不能再直接帮助你了。也许这个例子可以帮助:http://www.satyam.com.ar/yui/#ServerDriven。我确实记得2.6中有很大的变化,这个例子标记为2.4,也许它们不再有效。