perf(table): 改进 updateRow 渲染性能

pull/1540/head
sight 2024-01-13 11:03:48 +08:00
parent bc61f9ff08
commit d361a327ea
2 changed files with 10 additions and 5 deletions

View File

@ -29,6 +29,7 @@ toc: true
| [table.reloadData(id, options, deep)](#table.reloadData) <sup>2.7+</sup> | 表格数据重载。 |
| [table.renderData(id)](#table.renderData) <sup>2.8.5+</sup> | 重新渲染数据。 |
| [table.updateRow(id, opts)](#table.updateRow) <sup>2.9.4+</sup> | 更新指定行数据。 |
| [table.updateTotalRow(id, totalRowData)](#table.updateTotalRow) <sup>2.9.4+</sup> | 更新合计行。 |
| [table.checkStatus(id)](#table.checkStatus) | 获取选中行相关数据。 |
| [table.setRowChecked(id, opts)](#table.setRowChecked) <sup>2.8+</sup> | 设置行选中状态。 |
| [table.getData(id)](#table.getData) | 获取当前页所有行表格数据。 |
@ -356,7 +357,7 @@ table.updateTotalRow('test', function(field, columnValues, tableData){
| --- | --- | --- | --- |
| index | 行下标 | number | - |
| row | 行数据 | object | - |
| related | 是否更新其他包含自定义模板且可能有所关联的列视图 | boolean | - |
| related | 是否更新其他包含自定义模板且可能有所关联的列视图 | boolean/function | - |
该方法用于更新指定行数据。
@ -375,6 +376,10 @@ table.updateRow('test', {
id: 1,
username: 'name'
}
// 是否更新关联的列视图
related: function(field, index){
return ['score', '5'].indexOf(field) !== -1;
}
});
```

View File

@ -1914,7 +1914,7 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){
* @typedef updateRowOptions
* @prop {number} index - 行索引
* @prop {Object.<string, any>} row - 行数据
* @prop {boolean} [related] - 更新其他包含自定义模板且可能有所关联的列视图
* @prop {boolean | ((field, index) => boolean)} [related] - 更新其他包含自定义模板且可能有所关联的列视图
*/
/**
* 更新指定行
@ -1953,9 +1953,10 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){
}, data)
}));
td.data("content", value);
that.renderFormByElem(cell);
}
// 更新其他包含自定义模板且可能有所关联的列视图
else if (related && (item3.templet || item3.toolbar)) {
else if ((typeof related === 'function' ? related(String(item3.field || i), i) : related) && (item3.templet || item3.toolbar)) {
var thisTd = tr.children('td[data-field="' + (item3.field || i) + '"]');
var content = data[item3.field];
var thisCell = thisTd.children(ELEM_CELL);
@ -1968,11 +1969,10 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){
}, data)
}));
thisTd.data("content", content);
that.renderFormByElem(thisCell);
}
});
});
that.renderFormByElem(tr);
}
layui.each(opts, function(i, opt){