define(function (require, exports, module) { var editorHandler = require('../views/editors/handler'); function GridAdapter(id, args, pageId) { args = _.clone(args); this.id = id; this.pageId = pageId; this.data = { columns: [], rows: [] }; this.vmodel = {}; this.selectedRows = []; this.isGroupHeader = false; args = args || {}; _init(this, args); } function _init(self, args) { _initOpts(self, args); _initActions(self, args); self.isGroupHeader = isGroupHeader(args.data.columns); //数据源专属操作 if (args.data && args.data.isDataSource) { _initDs(self, args); } else { if (self.isGroupHeader) { self.data.columns = treeTanversal(flatten2Tree(columns2Flatten(args.data.columns))); } else { self.data.columns = _setColumns(self, args.data.columns); } self.data.rows = args.data.rows; } } function _initOpts(self, args) { var opts = { autoEdit: true, editable: false, pageSize: -1, pagenum: 0, totalRows: -1, enableAddRow: false, enableCellNavigation: true, defaultColumnWidth: 100, enableColumnRecorder: true, dataItemColumnValueExtractor: function (item, columnDef) { if (item && item.getColumnText) { return item.getColumnText(columnDef.field); } return item[columnDef.field]; } }; if (args.opts) { self.opts = _.extend(opts, args.opts); } else { self.opts = opts; } //分页信息设置 if (args.data && args.data.isDataSource) { args.data.setPageSize(self.opts.pageSize); args.data.setPagenum(self.opts.pagenum); } } function _initActions(self, _args) { self.actions = { onClick: function (e, args) { if (_args.actions && typeof _args.actions.onClick == 'function') { _args.actions.onClick(e, args); } }, //grid中删除整行按钮的点击 onColumndeleteButtonClick: function (row) { if (_args.actions && typeof _args.actions.onColumndeleteButtonClick == 'function') { _args.actions.onColumndeleteButtonClick(row); } }, //点击grid中cell里按钮的方法 onGridCellClick: function (object, row) { if (_args.actions && typeof _args.actions.onGridCellClick == 'function') { _args.actions.onGridCellClick(object, row); } }, onDblClick: function (e, args) { if (_args.actions && typeof _args.actions.onDblClick == 'function') { _args.actions.onDblClick(e, args); } }, onRClick: function (e, args) { self.onRClick(e, args); if (_args.actions && typeof _args.actions.onRClick == 'function') { _args.actions.onRClick(e, args); } }, onBeforeEditCell: function (e, args) { if (self.dataSrc && !self.dataSrc.allowEdit) return false; return self.onBeforeEditCell(e, args); }, onActiveCellChanged: function (e, args) { self.onActiveCellChanged(e, args); }, onBeforeActiveCellChanged: function (e, args) { return self.onBeforeActiveCellChanged(e, args) }, onSelectedRowsChanged: function (e, args) { self.onSelectedRowsChanged(e, args); if (_args.actions && typeof _args.actions.onSelectedRowsChanged == 'function') { _args.actions.onSelectedRowsChanged(e, args); } }, onSortClicked: function (field, asc) { if (_args.actions && typeof _args.actions.onSortClicked == 'function') { _args.actions.onSortClicked(field, asc); } }, onAddNewRow: function (e, args) { if (typeof self.onAddNewRow == 'function') { self.onAddNewRow(e, args); } if (_args.actions && typeof _args.actions.onAddNewRow == 'function') { _args.actions.onAddNewRow(e, args); } }, onRowCountChanged: function (e, args) { self.onRowCountChanged(e, args); }, onRowsChanged: function (e, args) { self.onRowsChanged(e, args); }, onPagingInfoChanged: function (e, args) { if (_args.actions && typeof _args.actions.onPagingInfoChanged === 'function') { _args.actions.onPagingInfoChanged(e, args); return; } else { self.onPagingInfoChanged(e, args); } }, onKeyDown: function (e, args) { if (e.ctrlKey && (e.which == 46 || e.which == 110)) { var grid = args.grid; var editable = grid.getOptions().editable; if (!editable || !self.dataSrc.allowDel) { return; } var dataRow = grid.getDataItem(args.row); if (dataRow && dataRow.isDataRow) { dataRow.delete(true); } } if (e.ctrlKey && e.which == 45) { var grid = args.grid; var editable = grid.getOptions().editable; if (!editable || !self.dataSrc.allowInsert) { return; } if (self.dataSrc.currentRow && self.dataSrc.currentRow.validate()) { self.dataSrc.addRow(); } } }, onActiveFirstCell: function () { if (_args.actions && typeof _args.actions.onActiveFirstCell == 'function') { _args.actions.onActiveFirstCell(); return; } var grid = self.vmodel.$grid; var nowEditor; if (grid.getColumns().length) { for (i = 0; i < grid.getColumns().length; i++) { grid.setActiveCell(0, i); grid.editActiveCell(); if (grid.getCellEditor()) { nowEditor = grid.getCellEditor(); break; } } } nowEditor.focus(); } }; // 参数actions覆盖adpter actions,不知道原来为什么被注释掉 // if (_args.actions) { // _.extend(self.actions, _args.actions); // } } function _initDs(self, args) { self.dataSrc = args.data; self.opts.editable = self.opts.editable ? true : self.dataSrc.getEditable(); self.opts.enableAddRow = self.dataSrc.allowInsert && self.opts.editable; self.dataSrc.on('onCollectChanged', function (ds, args) { if (args.action != Store.Enums.CollectionChangedAction.REPLACE) { self.setData(ds.rows); // 分页以及排序情况下不必重置排序 if (ds.isMaster || (!ds.isMaster && !ds.detailPageOrderList)) { self.resetSort(); } if (self.dataSrc.getPagenum() == 0) { self.setPagingOptions({ pageNum: self.dataSrc.getPagenum() }, true); } //通常只有reject操作才会出现该现象 if (args.action == Store.Enums.CollectionChangedAction.RESET && ds.currentRow !== null) { _setGridCurrentRow(self, ds.currentRow, 0); } } else { if (self.vmodel.$grid) { var grid = self.vmodel.$grid; var row = self.vmodel.$dataView.getRowById(args.row['$id']); grid.updateRow(row); } } self.afterDataSrcLoadData(); }, self); self.dataSrc.on('onValueChanged', function (ds, e) { if (self.vmodel.$grid) { var grid = self.vmodel.$grid; //var idx = self.vmodel.$dataView.getIdxById(e.row['$id']); var row = self.vmodel.$dataView.getRowById(e.row['$id']); var col = grid.getColumnIndex(e.col.fieldName); grid.updateCell(row, col); //grid.resizeCanvas(); } // self.afterDataSrcLoadData(); }, self); self.dataSrc.on('onPropertyChanged', function (ds, e) { if (e.propertyName == 'Editable') { self.setEditable(ds.getEditable()); } }, self); self.dataSrc.on('onCurrentChanged', function (ds, e) { _setGridCurrentRow(self, e.newRow); }, self); self.dataSrc.on('commitEdit', function (ds, e) { e.isCancel = !self.commitEditor(); //在beforeSave前移除空行 if (!e.isCancel) { self.dataSrc.removeEmptyRow(); } }, self); self.dataSrc.on('onAfterDataSrcLoadData', function (ds, e) { self.afterDataSrcLoadData(); self.resizeGrid(); }, self); self.dataSrc.on('onAfterDataSrcSave', function (ds, e) { self.afterDataSrcLoadData(); }, self); args.data = { columns: _setColumns(self, self.dataSrc.columns), rows: self.dataSrc.rows }; self.data = args.data; } ////////////////////////////////////////////////////////////////////////////////////////////// //提供的方法实现 function _setGridCurrentRow(self, dataRow, cellCol) { if (self.vmodel.$dataView && self.vmodel.$grid) { var newCell = null if (!dataRow) { self.vmodel.$grid.resetActiveCell() return } var index = self.vmodel.$dataView.getRowById(dataRow.$id); var oldActiveCell = self.vmodel.$grid.getActiveCell(); if (oldActiveCell && oldActiveCell.row == index) { return } newCell = { row: index > -1 ? index : 0, col: oldActiveCell ? oldActiveCell.cell : 0 }; if (cellCol !== undefined) { newCell.col = cellCol; } if (self.vmodel.$grid.getEditorLock()) { self.vmodel.$grid.getEditorLock().cancelCurrentEdit() } self.vmodel.$grid.setActiveCell(newCell.row, newCell.col); // self.vmodel.$grid.scrollRowIntoView(newCell.row, false); } } /** * 设置网格列的属性 * @param {[type]} gridColumn [description] * @param {[type]} dataColumn [description] */ function _setColumnOptions(gridColumn, dataColumn) { gridColumn.id = dataColumn.fieldName; gridColumn.sortable = true; gridColumn.field = dataColumn.fieldName; gridColumn.width = parseInt(dataColumn.headerWidth) * 12; if (gridColumn.width < 56) { gridColumn.width = 56; } gridColumn.name = dataColumn.dispName; gridColumn.isCalc = dataColumn.isCalc; gridColumn.formatter = dataColumn.getFormatter(); gridColumn.isEditable = dataColumn.isEditable; gridColumn.dataColumn = dataColumn; gridColumn.cannotTriggerInsert = !dataColumn.isEditable; //2015-10-08添加这个属性,用来判断时是否可以编辑。 gridColumn.isReadonly = !dataColumn.isEditable; if (!dataColumn.isEditable) { gridColumn.cssClass = 'column-un-editable'; } else { gridColumn.cssClass = 'column-un-edit'; } if (dataColumn.editStyle === Store.Enums.EditStyle.DECIMAL) { gridColumn.cssClass = gridColumn.cssClass ? gridColumn.cssClass + ' decimal-column-show' : 'decimal-column-show'; } gridColumn.validator = function (item, newValue) { var result = {}; if (dataColumn) { result.valid = dataColumn.validator(item, newValue); if (!result.valid) { result.msg = item.getColumnError(dataColumn.fieldName); } } return result; } gridColumn.editor = editorHandler.getEditor(dataColumn.editStyle); if (dataColumn.dataSrc) { gridColumn.cache = (dataColumn.dataSrc.datasetName + '_' + dataColumn.fieldName).toLowerCase(); } } function _setColumns(self, dataColumns) { var columns = []; var orderCols = []; var sortedColumns = _.sortBy(dataColumns, 'dispIndex'); var pageIdArray = null; if (self.opts.pageId) { pageIdArray = self.opts.pageId.split(','); for (var i = 0; i < pageIdArray.length; i++) { orderCols = orderCols.concat(_.where(dataColumns, { 'pageId': parseInt(pageIdArray[i]) })); } orderCols = _.sortBy(orderCols, 'dispIndex'); } else { orderCols = sortedColumns; } for (var i = 0; i < orderCols.length; i++) { var column = {}; var item = orderCols[i]; if ((item.procParaType == Store.Enums.ProcParaType.NONE || !item.procParaType) && (item.dispPosition == '0' || item.dispPosition == '1')) { _setColumnOptions(column, item); columns.push(column); } } if (self.isGroupHeader) { columns = treeTanversal(flatten2Tree(columns2Flatten(columns))); } return columns; } function columns2Flatten(columns) { var array = []; for (var i = 0; i < columns.length; i++) { var names = columns[i].name.split('|'); var fields = columns[i].field.split('|'); if (fields.length > 1) { //分组 for (var j = 0; j < fields.length; j++) { var column = {}; column.name = names[j]; column.sid = fields[j]; column.headerCssClass = 'text-center'; if (j == 0) { column.pid = 0; } else { column.pid = fields[j - 1]; } if (j < (fields.length - 1)) { column.id = fields[0]; array.push(column); } else if (j == (fields.length - 1)) { //末级 columns[i].name = names[j]; columns[i].sid = fields[j]; columns[i].pid = fields[j - 1]; array.push(columns[i]); } } ; } else { //无分组 columns[i].sid = columns[i].id; columns[i].pid = 0; array.push(columns[i]); } } ; return array; } function isGroupHeader(columns) { for (var i = 0; i < columns.length; i++) { if (columns[i].field) { var fields = columns[i].field.split('|'); if (fields.length > 1) { return true; } } ; } ; return false; } function flatten2Tree(arr) { var tree = [], mappedArr = {}, arrElem, mappedElem; for (var i = 0, len = arr.length; i < len; i++) { arrElem = arr[i]; mappedArr[arrElem.id] = arrElem; mappedArr[arrElem.id]['columns'] = []; } for (var sid in mappedArr) { if (mappedArr.hasOwnProperty(sid)) { mappedElem = mappedArr[sid]; if (mappedElem.pid) { mappedArr[mappedElem['pid']]['columns'].push(mappedElem); } else { tree.push(mappedElem); } } } return tree; } function treeTanversal(tree) { for (var i = 0; i < tree.length; i++) { if (tree[i].hasOwnProperty('columns')) { if (tree[i].columns.length == 0) { var column = _.clone(tree[i]); //JSON.parse(JSON.stringify(tree[i])); delete column.columns; tree[i].columns.push(column); tree[i].name = ''; delete tree[i].field; } else { trimArray(tree[i].columns); } } } return tree; } function trimArray(arr) { for (var i = 0; i < arr.length; i++) { if (arr[i].hasOwnProperty('columns')) { if (arr[i].columns.length == 0) { delete arr[i].columns; } else { trimArray(arr[i].columns); } } } ; } GridAdapter.prototype.onPagingInfoChanged = function (e, args) { var self = this; if (Number.isNaN(args.pageNum) || args.pageNum < 0 || args.pageNum == self.dataSrc.getPagenum() || self.dataSrc.getTotalRows() <= 0) { return; } self.dataSrc.setPagenum(args.pageNum); self.dataSrc.search(function () { //self.vmodel.$grid.resizeCanvas(); self.vmodel.$resizeGrid(); }, { reset: false }); /* var prevPageSize = self.dataSrc._pageSize; var prevPageNum = self.dataSrc._pagenum; var prevTotalRows = self.dataSrc._totalRows; if ((prevPageSize == args.pageSize && prevPageNum == args.pageNum) || (args.totalRows == 0 && args.totalPages == 1)) { //DataSurce.clear()触发onCollectChanged引起pageingInfo改变,不作处理 self.vmodel.$grid.resizeCanvas(); return; } if (prevPageSize == -1 && (args.pageSize == 0 || args.pageNum == 0)) { self.dataSrc.setPageSize(args.pageSize); self.vmodel.$grid.resizeCanvas(); return; } if (prevPageNum != args.pageNum) { //页码改变 if (prevPageSize == -1) { //刷新按钮,重置为第1页 self.dataSrc.setPagenum(0); self.setPagingOptions({ pageNum: 0 }, true); } else { self.dataSrc.setPagenum(args.pageNum); } } if (prevPageSize != args.pageSize) { //每页显示行数发生改变 self.dataSrc.setPagenum(0); self.dataSrc.setPageSize(args.pageSize); self.setPagingOptions({ pageNum: 0 }); } self.dataSrc.search(function() { self.vmodel.$grid.resizeCanvas(); });*/ } GridAdapter.prototype.setOptions = function (opts) { this.vmodel.$grid.getEditorLock().cancelCurrentEdit(); this.vmodel.$grid.setOptions(opts); }; /** * 重绘行高 */ GridAdapter.prototype.resizeRowHeight = function () { this.vmodel.$resizeRowHeight(); }; GridAdapter.prototype.resizeGrid = function () { this.vmodel.$resizeGrid && this.vmodel.$resizeGrid(); }; /** * 下移一行 * @return {Function} [description] */ GridAdapter.prototype.next = function () { this.vmodel.$grid.navigateDown(); }; /** * 上移一行 * @return {[type]} [description] */ GridAdapter.prototype.prev = function () { this.vmodel.$grid.navigateUp(); }; /** * 根据显示行地址获取行数据 * @param {[type]} index [description] * @return {[type]} [description] */ GridAdapter.prototype.getData = function (index) { if (!this.vmodel.$dataView) { return null; } return this.vmodel.$dataView.getItem(index); }; /** * 修改网格整体数据 * @param {[type]} rows [description] */ GridAdapter.prototype.setData = function (rows) { if (!this.vmodel.$dataView) { return; } var grid = this.vmodel.$grid if (grid) { grid.invalidateAllRows(); } this.vmodel.$dataView.setItems(rows, '$id'); }; GridAdapter.prototype.getItems = function () { if (!this.vmodel.$dataView) { return []; } return this.vmodel.$dataView.getItems(); }; GridAdapter.prototype.selectAll = function () { this.setSelectedRows(_.range(this.vmodel.$dataView.getItems().length)) }; GridAdapter.prototype.resetSort = function () { if (this.vmodel && this.vmodel.$grid) { this.vmodel.$grid.setSortColumn(null); } } GridAdapter.prototype.setEditable = function (isOk) { if (!this.vmodel || !this.vmodel.$grid) return; var args = {}; args.editable = isOk; args.enableAddRow = isOk && this.dataSrc.allowInsert; this.setOptions(args); this.vmodel.$resetSelectorScrollSize(); }; GridAdapter.prototype.updateSelection = function () { if (!this.vmodel.$grid) return; var items = this.getItems() var rows = [] for (var i = 0; i < items.length; i++) { if (items[i].$is_sel) { rows.push(i) } } this.vmodel.$grid.setSelectedRows(rows) } GridAdapter.prototype.setSelectedRows = function (rows) { if (!this.vmodel.$grid) return; this.vmodel.$grid.setSelectedRows(rows) }; GridAdapter.prototype.getSelectedRows = function (rows) { if (!this.vmodel.$grid) return []; return this.vmodel.$grid.getSelectedRows(); }; GridAdapter.prototype.onAddNewRow = function (e, args) { if (!args.item) { var grid = args.grid; var dataView = grid.getData(); grid.invalidateRow(dataView.getLength()); if (this.dataSrc.allowInsert && this.dataSrc.beforeAddFirstRow()) { var dsMaster = this.dataSrc.getMaster(); if (!dsMaster) { this.dataSrc.addRow() return } if (dsMaster.currentRow) { this.dataSrc.addRow() return } } setTimeout(function () { grid.resetActiveCell(); grid.render(); }, 100); } }; GridAdapter.prototype.onRowsChanged = function (e, args) { var grid = args.grid; grid.invalidateAllRows(); grid.render(); }; GridAdapter.prototype.render = function () { if (!this.vmodel.$grid) return; var grid = this.vmodel.$grid grid.invalidateAllRows(); grid.render(); } GridAdapter.prototype.onRowCountChanged = function (e, args) { var grid = args.grid; grid.updateRowCount(); grid.render(); }; GridAdapter.prototype.onBeforeEditCell = function (e, args) { var grid = args.grid; if (this.dataSrc && args.cell !== null && args.row != null) { var dr = args.item, dc = grid.getColumns()[args.cell].dataColumn; if (!dr || !dr.isDataRow) { return true; } if (!dc) { return true; } //主键字段在行编辑时,不允许编辑 var allowEdit = !this.dataSrc.getFieldReadOnly(dr, dc); if (!allowEdit) { return false; } } return true; }; function checkEditLimitRequire(ds) { var curRow = ds.currentRow, pass = true; for (var i = 0; i < ds.columns.length; i++) { var item = ds.columns[i]; if ((item.fieldName !== "DepId") && (item.fieldName !== "DepCode")) { //2020-06-03临时加上,主要是明细表增加行时老报主表部门不能为空错误 if (item.isEditLimit && !item.isEmptyField && !curRow[item.fieldName] && curRow[item.fieldName] !== 0) { var msg = Store.format(Store.MSG.GRID_EDITLIMIT_FORBIDDEN, item.dispName); Store.messager.warn(msg); pass = false; return pass; } } } return pass; } GridAdapter.prototype.onBeforeActiveCellChanged = function (e, args) { var grid = args.grid; if (!grid.getOptions().editable) { //grid不可编辑时,不进行行切换校验 return true; } var cell = grid.getActiveCell() || {}; var newCell = args.newCell if (!newCell) return false if (newCell.row != undefined && newCell.cell != undefined && newCell.row !== cell.row) { //行切换校验 var dataRow = grid.getDataItem(cell.row); var onerror = function (msg) { //grid.goBackToCell(activeRow, activeCell, true); Store.messager.err(msg); }; if (dataRow && !this.dataSrc.validateDataRow(dataRow, onerror)) { return false; } } return true; }; GridAdapter.prototype.onActiveCellChanged = function (e, args) { if (!this.dataSrc) { return; } var grid = args.grid; var dataSrc = this.dataSrc; var cell = grid.getActiveCell(); if (cell) { var dataRow = grid.getDataItem(cell.row); //如果dataRow为有效行,且与数据源当前行不一致则更新当前行 if (dataRow && dataRow !== dataSrc.currentRow) { var oldRow = dataSrc.currentRow; dataSrc.setCurrentRow(dataRow); } } else { //界面操作不会导致空行 //dataSrc.setCurrentRow(null); var s = 1; } }; function setRowIsSelected(grid, rowIndexs, isSelected) { let selectedRows = [] for (var i = 0; i < rowIndexs.length; i++) { var idx = rowIndexs[i]; var row = grid.getDataItem(idx); selectedRows.push(row) if (row) { row.$is_sel = isSelected; } } return selectedRows } GridAdapter.prototype.onSelectedRowsChanged = function (e, args) { var grid = args.grid; setRowIsSelected(grid, args.previousSelectedRows, false) args.selectedRows = setRowIsSelected(grid, args.rows, true) }; GridAdapter.prototype.setFilter = function (filter) { var dataView = this.vmodel.$dataView; if (dataView) { dataView.setFilter(filter); } }; /** * [setSelectboxDisable 设置grid第一列的checkbox是否可以点击] * @param {[type]} flag [flag为true时设置checkbox为disable,flag为false时设置checkbox为enable] */ GridAdapter.prototype.setSelectboxDisable = function (flag) { var headerId = this.vmodel.$grid.getColumns()[0].id; //判断第一列是不是checkboxselector if (headerId != "_checkbox_selector") return; var headerNode = "" : ">"); if (flag) { this.vmodel.$grid.updateColumnHeader(headerId, headerNode); } for (var i = 0; i < this.vmodel.$columns.length; i++) { if (this.vmodel.$columns[i].id === "_checkbox_selector") { this.vmodel.$columns[i].uncheckable = flag; break; } } this.vmodel.$grid.invalidateAllRows(); this.vmodel.$grid.render(); } GridAdapter.prototype.setColumnEditable = function (field, flag) { var columns = this.vmodel.$columns; for (var i = 0; i < columns.length; i++) { if (columns[i].field == field) { columns[i].isReadonly = !flag; } } ; } GridAdapter.prototype.setPagingOptions = function (options, force) { if (!this.vmodel.$dataView) { return; } this.vmodel.$dataView.setPagingOptions(options, force); } GridAdapter.prototype.commitEditor = function () { return this.vmodel.$grid.getEditorLock().commitCurrentEdit(); } GridAdapter.prototype.addContextMenu = function (fn) { this._contextMenu = fn; }; GridAdapter.prototype.removeContextMenu = function () { delete this._contextMenu; }; GridAdapter.prototype.onRClick = function (e, args) { if (this._contextMenu) { //只有网格允许编辑时,才可以弹出右键 // var editable = this.vmodel.$grid.getOptions().editable; // if (editable) { e.preventDefault(); this._contextMenu({ top: e.pageY, left: e.pageX }, { data: this.dataSrc, items: this.dataSrc.onGetContextMenus(this.id) || [] }); // } } }; GridAdapter.prototype.toggleRowsSelection = function () { this.vmodel.$toggleRowsSelection(); }; GridAdapter.prototype.afterDataSrcLoadData = function () { this.vmodel.$setHeaderColumnData(); this.vmodel.$resetSelectorScrollSize(); }; GridAdapter.prototype.getSchemaData = function (hasData) { if (!this.dataSrc) { return []; } var rows = [], columns = [], vmodel = this.vmodel; var $columns = vmodel.$grid.getColumns(); for (var i = 0; i < $columns.length; i++) { var gridCol = $columns[i]; if (gridCol.dataColumn) { columns.push({ fieldName: gridCol.dataColumn.fieldName, dispName: gridCol.dataColumn.dispName, paraValue: gridCol.dataColumn.paraValue }); } } if (hasData) { for (var j = 0; j < this.dataSrc.rows.length; j++) { var dr = this.dataSrc.rows[j]; var row = {}; for (var k = 0; k < columns.length; k++) { row[columns[k].fieldName] = dr.getColumnText(columns[k].fieldName); } ; rows.push(row); } } var searchParams = this.dataSrc.getSchemaData(); return { uiObjCode: this.dataSrc.uiObjCode, funcCode: this.dataSrc.funcCode, queryParams: searchParams.queryParams, columnParams: searchParams.columnParams, rows: rows, columns: columns }; }; GridAdapter.prototype.getNode = function (row, column) { var self = this; for (var i = 0; i < self.vmodel.$grid.getOptions().pageSize; i++) { if (self.vmodel.$grid.getDataItem(i).$id === row.$id) { var rownum = i; break; } } return self.vmodel.$grid.getCellNode(rownum, column); }; GridAdapter.prototype.destroy = function() { if (this.vmodel.$grid) { this.vmodel.$grid.destroy() } if (this.dataSrc) { this.dataSrc.unmount(this) } } return GridAdapter; })