编辑表格:存储、恢复时单元格绘制统一执行,提高效率

This commit is contained in:
datagear 2019-01-07 19:01:17 +08:00
parent 2d3c132f60
commit a66a05a6a9
1 changed files with 41 additions and 14 deletions

View File

@ -761,8 +761,9 @@ WebUtils.setPageId(request, gridPageId);
{
var model = po.editGridModel;
var storeCount = 0;
var changedCellIndexes = [];
var changedCellValues = [];
var changedCellHtmls = [];
var unchangedCellIndexes = [];
for(var pi in propertyIndexesMap)
@ -775,8 +776,6 @@ WebUtils.setPageId(request, gridPageId);
{
var index = pindexes[i];
var cell = dataTable.cell(index);
var originalRowData = po.originalRowData(dataTable, index.row);
var originalCellValue = $.model.propertyValue(originalRowData, property);
var myPropertyValue = propertyValue;
@ -818,10 +817,10 @@ WebUtils.setPageId(request, gridPageId);
if(changed)
{
var $cell = $(cell.node());
changedCellIndexes.push(index);
//undefined值会使cell.data()语义不符
cell.data((propertyValue == undefined ? null : propertyValue)).draw();
changedCellValues.push((propertyValue == undefined ? null : propertyValue));
//多元属性值单元格显示“[原始元素个数]+[新加元素个数]”
if($.model.isMultipleProperty(property) && !po.isClientDataRow(dataTable, index.row))
@ -829,20 +828,42 @@ WebUtils.setPageId(request, gridPageId);
var originalLen = $.model.getMultiplePropertyValueLength(originalCellValue);
var newLen = $.model.getMultiplePropertyValueLength(myPropertyValue);
$cell.html(originalLen+"+"+newLen);
changedCellHtmls.push(originalLen+"+"+newLen);
}
po.markAsModifiedCell($cell);
else
changedCellHtmls.push(null);
}
else
po.markAsUnmodifiedCell($(cell.node()));
storeCount++;
{
unchangedCellIndexes.push(index);
}
}
}
for(var i=0; i<changedCellIndexes.length; i++)
dataTable.cell(changedCellIndexes[i]).data(changedCellValues[i]);
//统一绘制,效率更高
dataTable.cells(changedCellIndexes).draw();
for(var i=0; i<changedCellIndexes.length; i++)
{
var $cell = $(dataTable.cell(changedCellIndexes[i]).node());
if(changedCellHtmls[i] != null)
$cell.html(changedCellHtmls[i]);
po.markAsModifiedCell($cell);
}
for(var i=0; i<unchangedCellIndexes.length; i++)
{
var $cell = $(dataTable.cell(unchangedCellIndexes[i]).node());
po.markAsUnmodifiedCell($cell);
}
//新值可能会影响单元格宽度,因此需要重设列宽
if(storeCount > 0)
if(changedCellIndexes.length > 0)
dataTable.columns.adjust();
//保存后的下一次选中单元格操作触发编辑
@ -882,7 +903,7 @@ WebUtils.setPageId(request, gridPageId);
var property = $.model.getProperty(model, propertyIndex);
var originalCellValue = $.model.propertyValue(originalRowData, property);
this.data((originalCellValue == undefined ? null : originalCellValue)).draw();
this.data((originalCellValue == undefined ? null : originalCellValue));
}
po.markAsUnmodifiedCell($(this.node()));
@ -890,6 +911,9 @@ WebUtils.setPageId(request, gridPageId);
restoreCount++;
});
//统一绘制,效率更高
editCells.draw();
//新值可能会影响单元格宽度,因此需要重设列宽
if(restoreCount > 0)
dataTable.columns.adjust();
@ -943,7 +967,10 @@ WebUtils.setPageId(request, gridPageId);
$.initButtons(po.element(".edit-grid-operation"));
po.element("#${pageId}-editGridSwitch").checkboxradio({icon : true}).change(function(event)
var $editGridSwitch = po.element("#${pageId}-editGridSwitch");
//XXX 某些浏览器在刷新页面后会记住选中状态(比如火狐),这回导致页面逻辑出错,所以这里需要重置
$editGridSwitch.prop("checked", false);
$editGridSwitch.checkboxradio({icon : true}).change(function(event)
{
var $thisCheckbox = $(this);