自学内容网 自学内容网

解决:使用layui.treeTable.updateNode,更新表格数据后,done里面的事件丢失问题

 1. 背景

在给树形表格添加行点击事件,并且只更新当前行数据。 treeTable.updateNode("SpeProjListId", result.LAY_DATA_INDEX, result);更新数据后,点击事件失效。

1. 给字段绑定事件:

class="link_a link_style"

              , {
                  field: 'Name', title: '预算专项名称/项目名称', minWidth: 240, rowspan: 2, templet: function (d) {
                      if (d.IsParent) {
                          return `<a  href="javascript:;"
                              class="link_a link_style internal_link"
                              data-type="speProjCode"
                              data-value="${d.Code}"
                              data-name="${d.CtrlObjectValue1Name}">${d.CtrlObjectValue1Name}</a>`;
                      } else {
                          return `<a  href="javascript:;"
                                          class="link_a link_style internal_link"
                                          data-type="projCode"
                                          data-name="${d.Name}"
                                          data-value="${d.ExpBudProjectId}"
                                          >${d.Name}</a>`;

                      }
                  }
              }

2. done里面的点击事件:click 

                treeTable.render({
                    elem: '#SpeProjInfoSel'
                    , id: "SpeProjListId"
                    , method: "post"
                    , height: 'full-300'
                    , even: true
                    , data: self.SpecProjInfoList
                    , autoSort: false
                    , page: false
                    , css: [
                        // 对开启了编辑的单元格追加样式
                        '.layui-table-view td[data-edit]{color: #16B777;}'
                    ].join('')
                    , cols: [cols, fundCols]
                    , limit: 20
                    , tree: {
                        view: {
                            expandAllDefault: true,
                        },
                        customName: {
                            children: "ProjInfoList",
                            name: "Code",
                            isParent: "IsParent"
                        },
                        data: {
                            rootPid: "",
                        },
                        callback: {
                            onExpand: function () {
                                format.init();
                            }
                        }
                    }
                    , done: function (res) {
                        format.init();
                        form.render();
                        $(".expandAll").on("click", function () {
                            treeTable.expandAll("SpeProjListId", true);
                        })
                        $(".foldAll").on("click", function () {
                            treeTable.expandAll("SpeProjListId", false);
                        });
                        urp.callbackFunction.Remark_callBack = function (value, tag) {
                            var indexArr = tag.split(",");
                            var indexs = indexArr[1].split("-");
                            var list = self.SpecProjInfoList[indexs[0]].ProjInfoList[indexs[1]];
                            if (indexArr[0] == "Remark") {
                                list.Remark = value;
                            }
                        }
                        //预算专项抽屉式弹窗(父) 这里的事件触发
                        $(".link_a").click(function () {
                            module.CustomFunction.configSpecInfo($(this).data("value"), $(this).data("name"), $(this).data("type"), $(this).attr("folder-width"));
                            return;
                        });
                    }
                });

 3. 点击事件的回调函数:

 urp.callbackFunction.RefreshTable_Link_a=function(){};

函数里面使用了treeTable.updateNode("SpeProjListId", result.LAY_DATA_INDEX, result);更新数据。此时点击事件丢失。

4. 解决方法:  table.reload('SpeProjListId', {});重新渲染done里面的事件。

     CustomFunction: {
         configSpecInfo: function (value, valueName, type, folderWidth) {
             var paramData = {};
             if (type == "speProjCode") {
                 paramData = module.SpecProjInfoList.find(speInfo => { return speInfo.CtrlObjectValue1 == value });
             }

             const area = folderWidth != undefined ? [folderWidth, '100%'] : (type == "projCode" || type == "projAppCode" ? ['70%', '100%'] : ['30%', '100%']);
             urp.callbackFunction.RefreshTable_Link_a = function (data) {
                 //把数据塞到预算专项里面
             
                 var result = module.SpecProjInfoList.find(obj => obj.Code == data.CtrlObjectValue1);
                 result = $.extend(result, data)

                 module.SpecProjInfoList = module.SpecProjInfoList.filter(speInfo => { return speInfo.Code != data.CtrlObjectValue1 });
                 module.SpecProjInfoList = module.SpecProjInfoList.concat(result);
                 format.init();
//使用updateNode渲染行数据
                 treeTable.updateNode("SpeProjListId", result.LAY_DATA_INDEX, result);
                 table.reload('SpeProjListId', {});
                 format.init();
                 form.render();
             }
             let linkInfo = module.CustomFunction.getLinkHref(type, value)
             urp.openWindow({
                 href: linkInfo.href,
                 title: linkInfo.title + ` - ${valueName}`,
                 callbackFunction: 'RefreshTable_Link_a',
                 area: area,
                 target: 'parent',
                 queryString: "viewMode=edit",
                 ParamData: paramData,
                 initOpt: {
                     offset: 'r',
                     anim: 'slideLeft',
                     target: 'self',
                     shade: 0.1,
                     shadeClose: true,
                 },
             })
         },
         getLinkHref: (type, value) => {
             switch (type) {
                 case "speProjCode":
                     return { href: `/BG/ExpBudCtrl/ExpBudProjSpeProjDetail?CtrlObjectValue1=${value}&IsDrawersWindow=true`, title: "预算专项信息" }
                 case "projCode":
                     return { href: `/BG/ExpBudProj/ExpBudProjectDetailR?ExpBudProjectId=${value}&IsDrawersWindow=true`, title: "项目预算信息" }
                 case "projAppCode":
                     return { href: `/PL/ProjectApp/ProjectAppDetailR?ProjCode=${value}&IsDrawersWindow=true`, title: "项目申报书信息" }

             }
         },
     }

4.  效果图


原文地址:https://blog.csdn.net/m0_71959044/article/details/142635949

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!