您现在的位置:首页 >> 前端 >> 内容

easyui之datagrid控件分析

时间:2017/6/19 9:34:50 点击:

  核心提示:/** * datagrid - jQuery EasyUI * * Licensed under the GPL: * http://www.gnu.org/licenses/gpl.txt * *...
/**
 * datagrid - jQuery EasyUI
 *
 * Licensed under the GPL:
 *   http://www.gnu.org/licenses/gpl.txt
 *
 * Copyright 2010 stworthy [ stworthy@gmail.com ]
 *
 * Dependencies:
 *    resizable
 *    linkbutton
 *    pagination
 *
 */
/**
 * 整个的表格对象说的是最外层的p.datagrid元素
 * 表格的整体布局:
 * 
 *    
 *    
 *        
 *        
 *            
 *                
 *                    
 *                
 *                    
 *                        *            
 *                
 *                    
 *                
 *                
 *         
 */
(function ($) {

    function setSize(target) {
        var grid = $.data(target, 'datagrid').grid;
        var opts = $.data(target, 'datagrid').options;
        if (opts.fit == true) {
            var p = grid.parent();
            opts.width = p.width();
            opts.height = p.height();
        }

        if (opts.rownumbers || (opts.frozenColumns && opts.frozenColumns.length > 0)) {
            $('.datagrid-body .datagrid-cell,.datagrid-body .datagrid-cell-rownumber', grid).addClass('datagrid-cell-height');
        }

        var gridWidth = opts.width;
        if (gridWidth == 'auto') {
            if ($.boxModel == true) {
                gridWidth = grid.width();
            } else {
                gridWidth = grid.outerWidth();
            }
        } else {
            if ($.boxModel == true) {
                gridWidth -= grid.outerWidth() - grid.width();
            }
        }
        grid.width(gridWidth);

        var innerWidth = gridWidth;
        if ($.boxModel == false) {
            innerWidth = gridWidth - grid.outerWidth() + grid.width();
        }

        $('.datagrid-wrap', grid).width(innerWidth);
        $('.datagrid-view', grid).width(innerWidth);
        $('.datagrid-view1', grid).width($('.datagrid-view1 table', grid).width());
        $('.datagrid-view2', grid).width(innerWidth - $('.datagrid-view1', grid).outerWidth());
        $('.datagrid-view1 .datagrid-header', grid).width($('.datagrid-view1', grid).width());
        $('.datagrid-view1 .datagrid-body', grid).width($('.datagrid-view1', grid).width());
        $('.datagrid-view2 .datagrid-header', grid).width($('.datagrid-view2', grid).width());
        $('.datagrid-view2 .datagrid-body', grid).width($('.datagrid-view2', grid).width());

        var hh;
        var header1 = $('.datagrid-view1 .datagrid-header', grid);
        var header2 = $('.datagrid-view2 .datagrid-header', grid);
        header1.css('height', null);
        header2.css('height', null);
        if ($.boxModel == true) {
            hh = Math.max(header1.height(), header2.height());
        } else {
            hh = Math.max(header1.outerHeight(), header2.outerHeight());
        }
        $('.datagrid-view1 .datagrid-header table', grid).height(hh);
        $('.datagrid-view2 .datagrid-header table', grid).height(hh);
        header1.height(hh);
        header2.height(hh);

        if (opts.height == 'auto') {
            $('.datagrid-body', grid).height($('.datagrid-view2 .datagrid-body table', grid).height());
        } else {
            $('.datagrid-body', grid).height(
                opts.height
                - (grid.outerHeight() - grid.height())
                - $('.datagrid-header', grid).outerHeight(true)
                - $('.datagrid-title', grid).outerHeight(true)
                - $('.datagrid-toolbar', grid).outerHeight(true)
                - $('.datagrid-pager', grid).outerHeight(true)
            );
        }

        $('.datagrid-view', grid).height($('.datagrid-view2', grid).height());
        $('.datagrid-view1', grid).height($('.datagrid-view2', grid).height());
        $('.datagrid-view2', grid).css('left', $('.datagrid-view1', grid).outerWidth());
    }

    /**
     * wrap and return the grid object, fields and columns
     */
    function wrapGrid(target, rownumbers) {
        //首先在最外层包装一个p.datagrid,并且返回这个p.datagrid
        var grid = $(target).wrap('

 

').parent(); //下面开始在外层p.datagrid里面装东西,层次结构应该是 // // // // // // // // //
 
// // // // // grid.append( '

' + '

' + '

' + '

' + '

 

' + '

' + '

' + '

' + '

 
' + '' + '' + '' + '

' + '

' + '

 

' + '

' + '

 

' + '

' + '

 

' + '' + '' ); //获取哪些冻结列的信息 var frozenColumns = getColumns($('thead[frozen=true]', target)); //把冻结列的表头删除掉 $('thead[frozen=true]', target).remove(); //再获取非冻结列的信息 var columns = getColumns($('thead', target)); //再把非冻结列的表头删掉 $('thead', target).remove(); //把这个表格转移到之前包装好的层次:p.datagrid->datagrid-wrap->datagrid-view->p.datagrid-vew2->p.datagrid-body $(target).attr({ cellspacing: 0, cellpadding: 0, border: 0 }).removeAttr('width').removeAttr('height').appendTo($('.datagrid-view2 .datagrid-body', grid)); function getColumns(thead) { //thead标签中获取列的设置信息,获取冻结列的信息或者是非冻结列的信息 //返回的columns是纯二维对象数组,: //[ // [ // {title:"",align:"",sortable:"",checkbox:""}, // {title:"",align:"",sortable:"",checkbox:""} // ], // [{title:"",align:"",sortable:"",checkbox:""}] //] var columns = []; $('tr', thead).each(function () { var cols = []; $('th', this).each(function () { //可能这个版本不支持在data-options属性上设置列的属性,所以这里手动添加下面的代码块 var opx = eval("({" + $(this).attr("data-options") + "})"); var th = $(this); var col = { title: th.html(), align: th.attr('align') || 'left', sortable: th.attr('sortable') == 'true' || false, checkbox: th.attr('checkbox') == 'true' || false }; if (th.attr('field')) { col.field = th.attr('field'); } if (th.attr('formatter')) { col.formatter = eval(th.attr('formatter')); } if (th.attr('rowspan')) col.rowspan = parseInt(th.attr('rowspan')); if (th.attr('colspan')) col.colspan = parseInt(th.attr('colspan')); if (th.attr('width')) col.width = parseInt(th.attr('width')); col = $.extend(col, opx); cols.push(col); }); columns.push(cols); }); return columns; } //根据获取到的行列配置信息去拿字段 var fields = getColumnFields(columns); //将盛放内容的td全部使用class:datagrid-column-filedname标记,并且里面放置p.datagrid-cell $('.datagrid-view2 .datagrid-body tr', grid).each(function () { for (var i = 0; i < fields.length; i++) { $('td:eq(' + i + ')', this) .addClass('datagrid-column-' + fields[i]) .wrapInner('

 

'); } }); //给表格绑定"_resize"事件 grid.bind('_resize', function () { var opts = $.data(target, 'datagrid').options; if (opts.fit == true) { setSize(target); fixColumnSize(target); } return false; }); return { grid: grid, frozenColumns: frozenColumns, columns: columns }; } function createColumnHeader(columns) { //创建表头,创建的表头是一个table标签,这个table标签里,只有一个thead,里面可能有多个tr var t = $('
'); for (var i = 0; i < columns.length; i++) { var tr = $('').appendTo($('thead', t)); var cols = columns[i]; for (var j = 0; j < cols.length; j++) { var col = cols[j]; var attr = ''; if (col.rowspan) attr += 'rowspan="' + col.rowspan + '" '; if (col.colspan) attr += 'colspan="' + col.colspan + '" '; var th = $('+ attr + '>').appendTo(tr); if (col.checkbox) { th.attr('field', col.field); $('

 

') .html('') .appendTo(th); } else if (col.field) { th.append('

 

'); th.attr('field', col.field); $('.datagrid-cell', th).width(col.width); $('span', th).html(col.title); $('span.datagrid-sort-icon', th).html(' '); } else { th.append('

 

'); $('.datagrid-cell-group', th).html(col.title); } } } return t; } /** * set the common properties */ function setProperties(target) { var grid = $.data(target, 'datagrid').grid; var opts = $.data(target, 'datagrid').options; var data = $.data(target, 'datagrid').data; if (opts.striped) { $('.datagrid-view1 .datagrid-body tr:odd', grid).addClass('datagrid-row-alt'); $('.datagrid-view2 .datagrid-body tr:odd', grid).addClass('datagrid-row-alt'); } if (opts.nowrap == false) { $('.datagrid-body .datagrid-cell', grid).css('white-space', 'normal'); } $('.datagrid-header th:has(.datagrid-cell)', grid).hover( function () { $(this).addClass('datagrid-header-over'); }, function () { $(this).removeClass('datagrid-header-over'); } ); $('.datagrid-body tr', grid).mouseover(function () { var index = $(this).attr('datagrid-row-index'); $('.datagrid-body tr[datagrid-row-index=' + index + ']', grid).addClass('datagrid-row-over'); }).mouseout(function () { var index = $(this).attr('datagrid-row-index'); $('.datagrid-body tr[datagrid-row-index=' + index + ']', grid).removeClass('datagrid-row-over'); }).click(function () { var index = $(this).attr('datagrid-row-index'); if ($(this).hasClass('datagrid-row-selected')) { unselectRow(target, index); } else { selectRow(target, index); } if (opts.onClickRow) { opts.onClickRow.call(this, index, data.rows[index]); } }).dblclick(function () { var index = $(this).attr('datagrid-row-index'); if (opts.onDblClickRow) { opts.onDblClickRow.call(this, index, data.rows[index]); } }); function onHeaderCellClick() { var field = $(this).parent().attr('field'); var opt = getColumnOption(target, field); if (!opt.sortable) return; opts.sortName = field; opts.sortOrder = 'asc'; var c = 'datagrid-sort-asc'; if ($(this).hasClass('datagrid-sort-asc')) { c = 'datagrid-sort-desc'; opts.sortOrder = 'desc'; } $('.datagrid-header .datagrid-cell', grid).removeClass('datagrid-sort-asc'); $('.datagrid-header .datagrid-cell', grid).removeClass('datagrid-sort-desc'); $(this).addClass(c); if (opts.onSortColumn) { opts.onSortColumn.call(this, opts.sortName, opts.sortOrder); } request(target); } function onHeaderCheckboxClick() { if ($(this).attr('checked')) { $('.datagrid-view2 .datagrid-body tr', grid).each(function () { if (!$(this).hasClass('datagrid-row-selected')) { $(this).trigger('click'); } }); } else { $('.datagrid-view2 .datagrid-body tr', grid).each(function () { if ($(this).hasClass('datagrid-row-selected')) { $(this).trigger('click'); } }); } } $('.datagrid-header .datagrid-cell', grid).unbind('.datagrid'); $('.datagrid-header .datagrid-cell', grid).bind('click.datagrid', onHeaderCellClick); $('.datagrid-header .datagrid-header-check input[type=checkbox]', grid).unbind('.datagrid'); $('.datagrid-header .datagrid-header-check input[type=checkbox]', grid).bind('click.datagrid', onHeaderCheckboxClick); $('.datagrid-header .datagrid-cell', grid).resizable({ handles: 'e', minWidth: 50, onStartResize: function (e) { $('.datagrid-resize-proxy', grid).css({ left: e.pageX - $(grid).offset().left - 1 }); $('.datagrid-resize-proxy', grid).css('display', 'block'); }, onResize: function (e) { $('.datagrid-resize-proxy', grid).css({ left: e.pageX - $(grid).offset().left - 1 }); return false; }, onStopResize: function (e) { fixColumnSize(target, this); $('.datagrid-view2 .datagrid-header', grid).scrollLeft($('.datagrid-view2 .datagrid-body', grid).scrollLeft()); $('.datagrid-resize-proxy', grid).css('display', 'none'); } }); $('.datagrid-view1 .datagrid-header .datagrid-cell', grid).resizable({ onStopResize: function (e) { fixColumnSize(target, this); $('.datagrid-view2 .datagrid-header', grid).scrollLeft($('.datagrid-view2 .datagrid-body', grid).scrollLeft()); $('.datagrid-resize-proxy', grid).css('display', 'none'); setSize(target); } }); var body1 = $('.datagrid-view1 .datagrid-body', grid); var body2 = $('.datagrid-view2 .datagrid-body', grid); var header2 = $('.datagrid-view2 .datagrid-header', grid); body2.scroll(function () { header2.scrollLeft(body2.scrollLeft()); body1.scrollTop(body2.scrollTop()); }); } /** * fix column size with the special cell element */ function fixColumnSize(target, cell) { var grid = $.data(target, 'datagrid').grid; var opts = $.data(target, 'datagrid').options; if (cell) { fix(cell); } else { $('.datagrid-header .datagrid-cell', grid).each(function () { fix(this); }); } function fix(cell) { var headerCell = $(cell); if (headerCell.width() == 0) return; var fieldName = headerCell.parent().attr('field'); $('.datagrid-body td.datagrid-column-' + fieldName + ' .datagrid-cell', grid).each(function () { var bodyCell = $(this); if ($.boxModel == true) { bodyCell.width(headerCell.outerWidth() - bodyCell.outerWidth() + bodyCell.width()); } else { bodyCell.width(headerCell.outerWidth()); } }); var col = getColumnOption(target, fieldName); col.width = $.boxModel == true ? headerCell.width() : headerCell.outerWidth(); } } function getColumnOption(target, field) { var opts = $.data(target, 'datagrid').options; if (opts.columns) { for (var i = 0; i < opts.columns.length; i++) { var cols = opts.columns[i]; for (var j = 0; j < cols.length; j++) { var col = cols[j]; if (col.field == field) { return col; } } } } if (opts.frozenColumns) { for (var i = 0; i < opts.frozenColumns.length; i++) { var cols = opts.frozenColumns[i]; for (var j = 0; j < cols.length; j++) { var col = cols[j]; if (col.field == field) { return col; } } } } return null; } /** * get column fields which will be show in row */ function getColumnFields(columns) { if (columns.length == 0) return []; function getFields(ridx, cidx, count) { var fields = []; while (fields.length < count) { var col = columns[ridx][cidx]; if (col.colspan && parseInt(col.colspan) > 1) { var ff = getFields(ridx + 1, getSubColIndex(ridx, cidx), parseInt(col.colspan)); fields = fields.concat(ff); } else if (col.field) { fields.push(col.field); } cidx++; } return fields; } function getSubColIndex(ridx, cidx) { var index = 0; for (var i = 0; i < cidx; i++) { var colspan = parseInt(columns[ridx][i].colspan || '1'); if (colspan > 1) { index += colspan; } } return index; } var fields = []; //只从第一行获取列信息 for (var i = 0; i < columns[0].length; i++) { var col = columns[0][i]; if (col.colspan && parseInt(col.colspan) > 1) { //如果有跨列,取列字段属性名就复杂了一点 var ff = getFields(1, getSubColIndex(0, i), parseInt(col.colspan)); fields = fields.concat(ff); } else if (col.field) { //如果就没有跨列,就直接取这一列的filed属性 fields.push(col.field); } } return fields; } /** * load data to the grid */ function loadData(target, data) { var grid = $.data(target, 'datagrid').grid; var opts = $.data(target, 'datagrid').options; var selectedRows = $.data(target, 'datagrid').selectedRows; var rows = data.rows; var getWidthDelta = function () { if ($.boxModel == false) return 0; var headerCell = $('.datagrid-header .datagrid-cell:first'); var headerDelta = headerCell.outerWidth() - headerCell.width(); var t = $('.datagrid-body table', grid); t.append($('

 

')); var bodyCell = $('.datagrid-cell', t); var bodyDelta = bodyCell.outerWidth() - bodyCell.width(); return headerDelta - bodyDelta; }; var widthDelta = getWidthDelta(); var frozen = opts.rownumbers || (opts.frozenColumns && opts.frozenColumns.length > 0); function getTBody(fields, rownumbers) { function isSelected(row) { if (!opts.idField) return false; for (var i = 0; i < selectedRows.length; i++) { if (selectedRows[i][opts.idField] == row[opts.idField]) return true; } return false; } var tbody = ['']; for (var i = 0; i < rows.length; i++) { var row = rows[i]; var selected = isSelected(row); if (i % 2 && opts.striped) { tbody.push('+ i + '" class="'); } if (selected == true) { tbody.push(' datagrid-row-selected'); } tbody.push('">'); if (rownumbers) { var rownumber = i + 1; if (opts.pagination) { rownumber += (opts.pageNumber - 1) * opts.pageSize; } if (frozen) { tbody.push('

' + rownumber + '

'); } else { tbody.push('

' + rownumber + '

'); } } for (var j = 0; j < fields.length; j++) { var field = fields[j]; var col = getColumnOption(target, field); if (col) { var style = 'width:' + (col.width + widthDelta) + 'px;'; style += 'text-align:' + (col.align || 'left'); tbody.push(''); tbody.push('<p style="' + style + '" ');="" if (col.checkbox) { tbody.push('class="datagrid-cell-check '); } else { tbody.push('class="datagrid-cell '); } if (frozen) { tbody.push('datagrid-cell-height '); } tbody.push('">'); if (col.checkbox) { if (selected) { tbody.push(''); } else { tbody.push(''); } } else if (col.formatter) { tbody.push(col.formatter(row[field], row)); } else { tbody.push(row[field]); } tbody.push(''); tbody.push(''); } } tbody.push(''); } tbody.push(''); return tbody.join(''); } $('.datagrid-body, .datagrid-header', grid).scrollLeft(0).scrollTop(0); var fields = getColumnFields(opts.columns); $('.datagrid-view2 .datagrid-body table', grid).html(getTBody(fields)); if (opts.rownumbers || (opts.frozenColumns && opts.frozenColumns.length > 0)) { var frozenFields = getColumnFields(opts.frozenColumns); $('.datagrid-view1 .datagrid-body table', grid).html(getTBody(frozenFields, opts.rownumbers)); } $.data(target, 'datagrid').data = data; $('.datagrid-pager', grid).pagination({total: data.total}); setSize(target); setProperties(target); } function getSelectedRows(target) { var opts = $.data(target, 'datagrid').options; var grid = $.data(target, 'datagrid').grid; var data = $.data(target, 'datagrid').data; if (opts.idField) { return $.data(target, 'datagrid').selectedRows; } var rows = []; $('.datagrid-view2 .datagrid-body tr.datagrid-row-selected', grid).each(function () { var index = parseInt($(this).attr('datagrid-row-index')); if (data.rows[index]) { rows.push(data.rows[index]); } }); return rows; } /** * clear all the selection records */ function clearSelections(target) { var grid = $.data(target, 'datagrid').grid; $('.datagrid-body tr.datagrid-row-selected', grid).removeClass('datagrid-row-selected'); $('.datagrid-body .datagrid-cell-check input[type=checkbox]', grid).attr('checked', false); var selectedRows = $.data(target, 'datagrid').selectedRows; while (selectedRows.length > 0) { selectedRows.pop(); } } /** * select a row with specified row index which start with 0. */ function selectRow(target, index) { var grid = $.data(target, 'datagrid').grid; var opts = $.data(target, 'datagrid').options; var data = $.data(target, 'datagrid').data; var selectedRows = $.data(target, 'datagrid').selectedRows; var tr = $('.datagrid-body tr[datagrid-row-index=' + index + ']', grid); var ck = $('.datagrid-body tr[datagrid-row-index=' + index + '] .datagrid-cell-check input[type=checkbox]', grid); if (opts.singleSelect == true) { clearSelections(target); } tr.addClass('datagrid-row-selected'); ck.attr('checked', true); if (opts.idField) { var row = data.rows[index]; for (var i = 0; i < selectedRows.length; i++) { if (selectedRows[i][opts.idField] == row[opts.idField]) { return; } } selectedRows.push(row); } opts.onSelect.call(target, index, data.rows[index]); } /** * select record by idField. */ function selectRecord(target, idValue) { var opts = $.data(target, 'datagrid').options; var data = $.data(target, 'datagrid').data; if (opts.idField) { var index = -1; for (var i = 0; i < data.rows.length; i++) { if (data.rows[i][opts.idField] == idValue) { index = i; break; } } if (index >= 0) { selectRow(target, index); } } } /** * unselect a row. */ function unselectRow(target, index) { var opts = $.data(target, 'datagrid').options; var grid = $.data(target, 'datagrid').grid; var selectedRows = $.data(target, 'datagrid').selectedRows; var tr = $('.datagrid-body tr[datagrid-row-index=' + index + ']', grid); var ck = $('.datagrid-body tr[datagrid-row-index=' + index + '] .datagrid-cell-check input[type=checkbox]', grid); tr.removeClass('datagrid-row-selected'); ck.attr('checked', false); var row = $.data(target, 'datagrid').data.rows[index]; if (opts.idField) { for (var i = 0; i < selectedRows.length; i++) { var row1 = selectedRows[i]; if (row1[opts.idField] == row[opts.idField]) { for (var j = i + 1; j < selectedRows.length; j++) { selectedRows[j - 1] = selectedRows[j]; } selectedRows.pop(); break; } } } opts.onUnselect.call(target, index, row); } /** * request remote data */ function request(target) { var grid = $.data(target, 'datagrid').grid; var opts = $.data(target, 'datagrid').options; if (!opts.url) return; var param = $.extend({}, opts.queryParams); if (opts.pagination) { $.extend(param, { page: opts.pageNumber, rows: opts.pageSize }); } if (opts.sortName) { $.extend(param, { sort: opts.sortName, order: opts.sortOrder }); } $('.datagrid-pager', grid).pagination({loading: true}); var wrap = $('.datagrid-wrap', grid); $('

 

').css({ display: 'block', width: wrap.width(), height: wrap.height() }).appendTo(wrap); $('

 

') .html(opts.loadMsg) .appendTo(wrap) .css({ display: 'block', left: (wrap.width() - $('.datagrid-mask-msg', grid).outerWidth()) / 2, top: (wrap.height() - $('.datagrid-mask-msg', grid).outerHeight()) / 2 }); $.ajax({ type: opts.method, url: opts.url, data: param, dataType: 'json', success: function (data) { $('.datagrid-pager', grid).pagination({loading: false}); $('.datagrid-mask', grid).remove(); $('.datagrid-mask-msg', grid).remove(); loadData(target, data); if (opts.onLoadSuccess) { opts.onLoadSuccess.apply(this, arguments); } }, error: function () { $('.datagrid-pager', grid).pagination({loading: false}); $('.datagrid-mask', grid).remove(); $('.datagrid-mask-msg', grid).remove(); if (opts.onLoadError) { opts.onLoadError.apply(this, arguments); } } }); } $.fn.datagrid = function (options, param) { //如果是字符串,表示是执行方法 if (typeof options == 'string') { switch (options) { case 'options': return $.data(this[0], 'datagrid').options; case 'resize': return this.each(function () { setSize(this); }); case 'reload': return this.each(function () { request(this); }); case 'fixColumnSize': return this.each(function () { fixColumnSize(this); }); case 'loadData': return this.each(function () { loadData(this, param); }); case 'getSelected': var rows = getSelectedRows(this[0]); return rows.length > 0 ? rows[0] : null; case 'getSelections': return getSelectedRows(this[0]); case 'clearSelections': return this.each(function () { clearSelections(this); }); case 'selectRow': return this.each(function () { selectRow(this, param); }); case 'selectRecord': return this.each(function () { selectRecord(this, param); }); case 'unselectRow': return this.each(function () { unselectRow(this, param); }); } } options = options || {}; return this.each(function () { var state = $.data(this, 'datagrid'); var opts; if (state) { opts = $.extend(state.options, options); state.options = opts; } else { //可能是这一个版本的树控件不支持data-options的加载方式,自己扩展了下面的代码段 var optex = {}; try { optex = eval("({" + $(this).attr("data-options") + "})"); } catch (ex) { } opts = $.extend({}, $.fn.datagrid.defaults, { width: (parseInt($(this).css('width')) || 'auto'), height: (parseInt($(this).css('height')) || 'auto'), fit: $(this).attr('fit') == 'true' }, options, optex); $(this).css('width', null).css('height', null); var wrapResult = wrapGrid(this, opts.rownumbers); if (!opts.columns) opts.columns = wrapResult.columns; if (!opts.frozenColumns) opts.frozenColumns = wrapResult.frozenColumns; $.data(this, 'datagrid', { options: opts, grid: wrapResult.grid, selectedRows: [] }); } var target = this; var grid = $.data(this, 'datagrid').grid; if (opts.border == true) { grid.removeClass('datagrid-noborder'); } else { grid.addClass('datagrid-noborder'); } if (opts.frozenColumns) { //如果发现这个表格存在冻结列,就创建冻结列的表头 var t = createColumnHeader(opts.frozenColumns); if (opts.rownumbers) { //如果有行号,就将行号列加入到表头中 var th = $('

 

'); if ($('tr', t).length == 0) { th.wrap('').parent().appendTo($('thead', t)); } else { th.prependTo($('tr:first', t)); } } //注意,这里可以看出 datagrid-view1是专为冻结行列表头准备的 $('.datagrid-view1 .datagrid-header-inner', grid).html(t); } if (opts.columns) { //如果这个表格有列,就创建表头,注意:这里并没有判断有没有冻结列,也就是说都要自己开一个表头出来 var t = createColumnHeader(opts.columns); //从这里可以看出表头是插入到了datagrid-view2的里面去的 $('.datagrid-view2 .datagrid-header-inner', grid).html(t); } $('.datagrid-title', grid).remove(); if (opts.title) { //如果有表格标题,就添加表格标题元素 var title = $('

 

'); $('.datagrid-title-text', title).html(opts.title); title.prependTo(grid); if (opts.iconCls) { $('.datagrid-title-text', title).addClass('datagrid-title-with-icon'); $('

 

').addClass(opts.iconCls).appendTo(title); } } $('.datagrid-toolbar', grid).remove(); if (opts.toolbar) { //如果有工具栏就添加工具栏元素 var tb = $('

 

').prependTo($('.datagrid-wrap', grid)); for (var i = 0; i < opts.toolbar.length; i++) { var btn = opts.toolbar[i]; if (btn == '-') { $('

 

').appendTo(tb); } else { var tool = $(''); tool[0].onclick = eval(btn.handler || function () { }); tool.css('float', 'left') .text(btn.text) .attr('icon', btn.iconCls || '') .appendTo(tb) .linkbutton({ plain: true, disabled: (btn.disabled || false) }); } } } $('.datagrid-pager', grid).remove(); if (opts.pagination) { //如果有分页就添加分页元素 var pager = $('

 

').appendTo($('.datagrid-wrap', grid)); pager.pagination({ pageNumber: opts.pageNumber, pageSize: opts.pageSize, pageList: opts.pageList, onSelectPage: function (pageNum, pageSize) { // save the page state opts.pageNumber = pageNum; opts.pageSize = pageSize; request(target); // request new page data } }); opts.pageSize = pager.pagination('options').pageSize; // repare the pageSize value } if (!state) { fixColumnSize(target); } setSize(target); if (opts.url) { request(target); } setProperties(target); }); }; $.fn.datagrid.defaults = { title: null, iconCls: null, border: true, width: 'auto', height: 'auto', frozenColumns: null, columns: null, striped: false, method: 'post', nowrap: true, idField: null, url: null, loadMsg: 'Processing, please wait ...', pagination: false, rownumbers: false, singleSelect: false, fit: false, pageNumber: 1, pageSize: 10, pageList: [10, 20, 30, 40, 50], queryParams: {}, sortName: null, sortOrder: 'asc', onLoadSuccess: function () { }, onLoadError: function () { }, onClickRow: function (rowIndex, rowData) { }, onDblClickRow: function (rowIndex, rowData) { }, onSortColumn: function (sort, order) { }, onSelect: function (rowIndex, rowData) { }, onUnselect: function (rowIndex, rowData) { } }; })(jQuery);

Tags:EA AS SY YU 
作者:网络 来源:火焰