修复 `treeTable.removeNode()` 在开启 `data` 模式时删除异常问题

pull/1404/head
贤心 1 year ago
parent 6aebbbbc38
commit 0c2a65457a

@ -421,45 +421,48 @@ layui.define(['table'], function (exports) {
return;
}
// 用index
// 用 index
return that.getNodeByIndex(dataIndex);
}
// 通过index获取节点数据
// 通过 index 获取节点数据
Class.prototype.getNodeDataByIndex = function (index, clone, newValue) {
var that = this;
var options = that.getOptions();
var treeOptions = options.tree;
var tableId = options.id;
var tableCache = table.cache[tableId];
var dataCache = table.cache[tableId][index];
// 获取当前行中的数据
var dataCache = tableCache[index];
// 若非删除操作,则返回合并后的数据
if (newValue !== 'delete' && dataCache) {
$.extend(dataCache, newValue);
return clone ? $.extend({}, dataCache) : dataCache;
}
var tableData = that.getTableData();
index += '';
var indexArr = index.split('-');
// 删除操作
var dataRet = tableCache;
var indexArr = String(index).split('-');
// if (options.url || indexArr.length > 1) tableCache = null // 只有在删除根节点的时候才需要处理
var dataRet = tableData;
var tableCache = (options.url || indexArr.length > 1) ? null : table.cache[tableId]; // 只有在删除根节点的时候才需要处理
// 根据 index 进行数据处理
for (var i = 0, childrenKey = treeOptions.customName.children; i < indexArr.length; i++) {
if (newValue && i === indexArr.length - 1) {
if (newValue === 'delete') {
// 删除
if (tableCache) {
// 同步cache
if (newValue === 'delete') { // 删除并返回当前数据
// 同步 cache --- 此段代码注释缘由data 属性模式造成数据重复执行 splice (@Gitee: #I7Z0A/I82E2S)
/*if (tableCache) {
layui.each(tableCache, function (i1, item1) {
if (item1[LAY_DATA_INDEX] === index) {
tableCache.splice(i1, 1);
return true;
}
})
}
}*/
return (i ? dataRet[childrenKey] : dataRet).splice(indexArr[i], 1)[0];
} else {
// 更新值
} else { // 更新值
$.extend((i ? dataRet[childrenKey] : dataRet)[indexArr[i]], newValue);
}
}

Loading…
Cancel
Save