diff --git a/examples/treeTable-test-reloadData.html b/examples/treeTable-test-reloadData.html new file mode 100644 index 00000000..4a17f2cc --- /dev/null +++ b/examples/treeTable-test-reloadData.html @@ -0,0 +1,72 @@ + + + + + + 树形表格 - layui + + + + +
+ + + + + + + + diff --git a/src/modules/table.js b/src/modules/table.js index d37dfe7a..42d51a2c 100644 --- a/src/modules/table.js +++ b/src/modules/table.js @@ -1079,7 +1079,7 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){ // 耗时(接口请求+视图渲染) options.time = (new Date().getTime() - that.startTime) + ' ms'; } - done(res); + done(res, opts.type); }, error: function(e, msg){ that.errorView('请求异常,错误提示:'+ msg); @@ -1109,7 +1109,7 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){ type: opts.type }), sort(); - done(res); + done(res, opts.type); } }; diff --git a/src/modules/treeTable.js b/src/modules/treeTable.js index 2acdf500..cba477d2 100644 --- a/src/modules/treeTable.js +++ b/src/modules/treeTable.js @@ -137,6 +137,14 @@ layui.define(['table'], function (exports) { var parseData = options.parseData; var done = options.done; + // treeTable重载数据时,会先加载显示顶层节点,然后根据重载数据前的子节点展开状态,展开相应的子节点, + // 那么如果重载数据前有滚动条滚动在某个位子,重新加载时顶层节点如果比较少,只显示顶层节点时没有滚动条的情况下, + // 自动展开子节点后,滚动条就会显示在顶部,无法保持在重载数据之前的位置。 + // 处理保持滚动条的问题,重载数据前记录滚动条的位置 + if(reload === 'reloadData' && thatOptionsTemp.scrollPos === 'fixed'){ + that.scrollTopCache = that.config.elem.next().find(ELEM_BODY).scrollTop(); + } + if (thatOptionsTemp.url) { // 异步加载的时候需要处理parseData进行转换 if (!reload || (reload && parseData && !parseData.mod)) { @@ -180,7 +188,11 @@ layui.define(['table'], function (exports) { options.done = function () { var args = arguments; var doneThat = this; - var isRenderData = args[3]; // 是否是 renderData + // undefined: 初始 render 或 reload,两者本质没有区别可以不做区分 + // 'reloadData': 重载数据 + // 'renderData': 重新渲染数据 + var renderType = args[3]; + var isRenderData = renderType === 'renderData'; if (!isRenderData) { delete that.isExpandAll; } @@ -206,6 +218,11 @@ layui.define(['table'], function (exports) { that.renderTreeTable(tableView); + // 恢复滚动条位置 + if(renderType === 'reloadData' && doneThat.scrollPos === 'fixed'){ + tableView.find(ELEM_BODY).scrollTop(that.scrollTopCache); + } + if (layui.type(done) === 'function') { return done.apply(doneThat, args); }