在Datagrid基础DOM结构的一文中,我对Datagrid组件的骨架做了很详细的描述。有了骨架还并不完整,还得有血有肉有衣服穿才行。强大的Datagrid组件允许我们自己定义如何在基础骨架上长出健壮诱人的身体,我们只要定义Datagrid的视图就可以实现。
在大多数情况下,我们并无特别要求,Datagrid给我们提供了默认的视图,默认视图被使用在90%以上的场景,所以对默认视图的分析显得非常有必要。注意视图里面定义了哪些接口,哪些方法,如果要自己写视图的话,最好把这些接口和方法都写齐全。
- var view = {
-
- render: function(target, container, frozen) {
- var data = $.data(target, "datagrid");
- var opts = data.options;
- var rows = data.data.rows;
- var fields = $(target).datagrid("getColumnFields", frozen);
- if(frozen) {
-
- if(!(opts.rownumbers || (opts.frozenColumns && opts.frozenColumns.length))) {
- return;
- }
- }
-
- var html = ["<table class=\"datagrid-btable\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody>"];
- for(var i = 0; i < rows.length; i++) {
-
- var cls = (i % 2 && opts.striped) ? "class=\"datagrid-row datagrid-row-alt\"" : "class=\"datagrid-row\"";
-
- var style = opts.rowStyler ? opts.rowStyler.call(target, i, rows[i]) : "";
- var styler = style ? "style=\"" + style + "\"" : "";
-
- var rowId = data.rowIdPrefix + "-" + (frozen ? 1 : 2) + "-" + i;
- html.push("<tr id=\"" + rowId + "\" datagrid-row-index=\"" + i + "\" " + cls + " " + styler + ">");
-
- html.push(this.renderRow.call(this, target, fields, frozen, i, rows[i]));
- html.push("</tr>");
- }
- html.push("</tbody></table>");
-
- $(container).html(html.join(""));
- },
-
- renderFooter: function(target, container, frozen) {
- var opts = $.data(target, "datagrid").options;
-
- var rows = $.data(target, "datagrid").footer || [];
- var columnsFields = $(target).datagrid("getColumnFields", frozen);
-
- var footerTable = ["<table class=\"datagrid-ftable\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody>"];
- for(var i = 0; i < rows.length; i++) {
- footerTable.push("<tr class=\"datagrid-row\" datagrid-row-index=\"" + i + "\">");
- footerTable.push(this.renderRow.call(this, target, columnsFields, frozen, i, rows[i]));
- footerTable.push("</tr>");
- }
- footerTable.push("</tbody></table>");
- $(container).html(footerTable.join(""));
- },
-
- renderRow: function(target, fields, frozen, rowIndex, rowData) {
- var opts = $.data(target, "datagrid").options;
-
- var cc = [];
- if(frozen && opts.rownumbers) {
-
- var rowNumber = rowIndex + 1;
-
- if(opts.pagination) {
- rowNumber += (opts.pageNumber - 1) * opts.pageSize;
- }
-
- cc.push("<td class=\"datagrid-td-rownumber\"><div class=\"datagrid-cell-rownumber\">" + rowNumber + "</div></td>");
- }
- for(var i = 0; i < fields.length; i++) {
- var field = fields[i];
- var col = $(target).datagrid("getColumnOption", field);
- if(col) {
- var value = rowData[field];
-
- var style = col.styler ? (col.styler(value, rowData, rowIndex) || "") : "";
-
- var styler = col.hidden ? "style=\"display:none;" + style + "\"" : (style ? "style=\"" + style + "\"" : "");
- cc.push("<td field=\"" + field + "\" " + styler + ">");
-
- if(col.checkbox) {
- var styler = "";
- } else {
- var styler = "";
-
- if(col.align) {
- styler += "text-align:" + col.align + ";";
- }
-
- if(!opts.nowrap) {
- styler += "white-space:normal;height:auto;";
- } else {
-
- if(opts.autoRowHeight) {
- styler += "height:auto;";
- }
- }
- }
-
- cc.push("<div style=\"" + styler + "\" ");
-
- if(col.checkbox) {
- cc.push("class=\"datagrid-cell-check ");
- }
-
- else {
- cc.push("class=\"datagrid-cell " + col.cellClass);
- }
- cc.push("\">");
-
- if(col.checkbox) {
- cc.push("<input type=\"checkbox\" name=\"" + field + "\" value=\"" + (value != undefined ? value : "") + "\"/>");
- }
-
- else {
-
- if(col.formatter) {
- cc.push(col.formatter(value, rowData, rowIndex));
- }
-
- else {
- cc.push(value);
- }
- }
- cc.push("</div>");
- cc.push("</td>");
- }
- }
-
- return cc.join("");
- },
-
- refreshRow: function(target, rowIndex) {
- this.updateRow.call(this, target, rowIndex, {});
- },
-
- updateRow: function(target, rowIndex, row) {
- var opts = $.data(target, "datagrid").options;
- var rows = $(target).datagrid("getRows");
- $.extend(rows[rowIndex], row);
- var style = opts.rowStyler ? opts.rowStyler.call(target, rowIndex, rows[rowIndex]) : "";
-
- function updateTableRow(frozen) {
- var fields = $(target).datagrid("getColumnFields", frozen);
-
-
- var tr = opts.finder.getTr(target, rowIndex, "body", (frozen ? 1 : 2));
- var checked = tr.find("div.datagrid-cell-check input[type=checkbox]").is(":checked");
-
- tr.html(this.renderRow.call(this, target, fields, frozen, rowIndex, rows[rowIndex]));
- tr.attr("style", style || "");
-
- if(checked) {
- tr.find("div.datagrid-cell-check input[type=checkbox]")._propAttr("checked", true);
- }
- };
-
- updateTableRow.call(this, true);
-
- updateTableRow.call(this, false);
-
- $(target).datagrid("fixRowHeight", rowIndex);
- },
- insertRow: function(target, rowIndex, row) {
- var state = $.data(target, "datagrid");
-
- var opts = state.options;
-
- var dc = state.dc;
- var data = state.data;
-
- if(rowIndex == undefined || rowIndex == null) {
- rowIndex = data.rows.length;
- }
-
- if(rowIndex > data.rows.length) {
- rowIndex = data.rows.length;
- }
-
- function moveDownRows(frozen) {
-
- var whichBody = frozen ? 1 : 2;
- for(var i = data.rows.length - 1; i >= rowIndex; i--) {
- var tr = opts.finder.getTr(target, i, "body", whichBody);
-
- tr.attr("datagrid-row-index", i + 1);
- tr.attr("id", state.rowIdPrefix + "-" + whichBody + "-" + (i + 1));
-
- if(frozen && opts.rownumbers) {
-
- var rownumber = i + 2;
-
- if(opts.pagination) {
- rownumber += (opts.pageNumber - 1) * opts.pageSize;
- }
- tr.find("div.datagrid-cell-rownumber").html(rownumber);
- }
- }
- };
-
- function doInsert(frozen) {
- var whichBody = frozen ? 1 : 2;
-
- var columnFields = $(target).datagrid("getColumnFields", frozen);
-
- var trId = state.rowIdPrefix + "-" + whichBody + "-" + rowIndex;
- var tr = "<tr id=\"" + trId + "\" class=\"datagrid-row\" datagrid-row-index=\"" + rowIndex + "\"></tr>";
- if(rowIndex >= data.rows.length) {
-
- if(data.rows.length) {
-
-
- opts.finder.getTr(target, "", "last", whichBody).after(tr);
- }
-
- else {
- var cc = frozen ? dc.body1 : dc.body2;
- cc.html("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody>" + tr + "</tbody></table>");
- }
- }
-
- else {
- opts.finder.getTr(target, rowIndex + 1, "body", whichBody).before(tr);
- }
- };
-
- moveDownRows.call(this, true);
-
- moveDownRows.call(this, false);
-
- doInsert.call(this, true);
-
- doInsert.call(this, false);
-
- data.total += 1;
-
- data.rows.splice(rowIndex, 0, row);
-
-
- this.refreshRow.call(this, target, rowIndex);
- },
-
- deleteRow: function(target, rowIndex) {
- var state = $.data(target, "datagrid");
- var opts = state.options;
- var data = state.data;
-
- function moveUpRows(frozen) {
- var whichBody = frozen ? 1 : 2;
- for(var i = rowIndex + 1; i < data.rows.length; i++) {
- var tr = opts.finder.getTr(target, i, "body", whichBody);
-
- tr.attr("datagrid-row-index", i - 1);
- tr.attr("id", state.rowIdPrefix + "-" + whichBody + "-" + (i - 1));
- if(frozen && opts.rownumbers) {
- var rownumber = i;
- if(opts.pagination) {
- rownumber += (opts.pageNumber - 1) * opts.pageSize;
- }
- tr.find("div.datagrid-cell-rownumber").html(rownumber);
- }
- }
- };
-
- opts.finder.getTr(target, rowIndex).remove();
-
- moveUpRows.call(this, true);
-
- moveUpRows.call(this, false);
-
- data.total -= 1;
-
- data.rows.splice(rowIndex, 1);
- },
-
- onBeforeRender: function(target, rows) {},
-
- onAfterRender: function(target) {
- var opts = $.data(target, "datagrid").options;
- if(opts.showFooter) {
- var footer = $(target).datagrid("getPanel").find("div.datagrid-footer");
- footer.find("div.datagrid-cell-rownumber,div.datagrid-cell-check").css("visibility", "hidden");
- }
- }
- };
转载:http://www.easyui.info/archives/1196.html
jQuery EasyUI Datagrid组件默认视图分析
原文:https://www.cnblogs.com/fengzhuqingwan/p/12189609.html