前端问题杂记

本文探讨了使用JavaScript与EasyUI框架时遇到的dataGrid高度设定问题及tree组件节点递归错误。深入分析了dataGrid指定展开高度导致的问题及解决策略,同时解析了tree组件在特定json数据下出现的无限循环问题,并提供了有效的解决方案。

1、dataGrid高度问题

关键字:JavaScript、EasyUI、dataGrid

描述
源码:

{
                // 材料选择
                $('#tt-material-select').datagrid({
                    method:'get',
                    url:$CONFIG.base_url+'/api/turnover/check/select?dataSource=调拨',
                    rownumbers:true,
                    singleSelect:true,
                    pagination:true,
                    pageSize:50,
                    height:350,
                    emptyMsg:"<div style='text-align: left;padding-left: 30px'>无数据显示</div>",
                    columns:[[
                        {field:'no',title:'交接单号',width:'18%',align:'left'},
                        {field:'attribute',title:'调入/调出',width:'10%',align:'left'},
                        {field:'category',title:'入库形式',width:'10%',align:'left'},
                        {field:'turnoutName',title:'调出单位',width:'15%',align:'left'},
                        {field:'turninName',title:'调入单位',width:'15%',align:'left'},
                        {field:'pics',title:'附件',width:'10%',align:'left',
                            formatter:function (value, row, index) {
                                return value?util.showPics(value):''
                            }
                        },
                        {field:'createdByName',title:'创建人',width:'10%',align:'left'},
                        {field:'createdDate',title:'创建日期',width:'10%',align:'left'}
                    ]],
                    view: detailview,
                    detailFormatter:function(index,row){
                        return '<div style="padding:2px;position:relative;"><table id="tt-material-select-son-'+index+'"></table></div>';
                    },
                    onExpandRow: function(index,row){
                        $('#tt-material-select-son-'+index).datagrid({
                            singleSelect:true,
                            rownumbers:true,
                            loadMsg:'',
                            data:row.details,
                            height:100,
                            emptyMsg:"<div style='text-align: left;padding-left: 30px'>无数据显示</div>",
                            columns:[[
                                {field:'materialDetailName',title:'周转材料名称',width:'15%',align:'left'},
                                {field:'type',title:'规格型号',width:'10%',align:'left'},
                                {field:'unit',title:'单位',width:'8%',align:'left'},
                                {field:'uncheckedNum',title:'未点数量',width:'15%',align:'left',
                                    formatter:function (value, row, index) {
                                        return value?value:0;
                                    }
                                },
                                {field:'convertWeight',title:'换算重量(吨)',width:'8%',align:'left',
                                    formatter:function (value, row, index) {
                                        return value?util.toFixed2(value,2):0.00;
                                    }
                                },
                                {field:'purchasePrice',title:'原本采购单价',width:'8%',align:'left',
                                    formatter:function (value, row, index) {
                                        return value?util.toFixed2(value,2):0.00;
                                    }
                                },
                                {field:'purchaseFee',title:'原采购金额',width:'8%',align:'left',
                                    formatter:function (value, row, index) {
                                        return value?util.toFixed2(value,2):0.00;
                                    }
                                },
                                {field:'transferRate',title:'转帐比例',width:'8%',align:'left',
                                    formatter:function (value, row, index) {
                                        return value?util.toFixed2(value,2):0.00;
                                    }
                                },
                                {field:'transferPrice',title:'转帐单价',width:'8%',align:'left',
                                    formatter:function (value, row, index) {
                                        return value?util.toFixed2(value,2):0.00;
                                    }
                                },
                                {field:'transferFee',title:'转帐金额',width:'8%',align:'left',
                                    formatter:function (value, row, index) {
                                        return value?util.toFixed2(value,2):0.00;
                                    }
                                },
                                {field:'warehouseName',title:'存放仓库',width:'8%',align:'center'},
                                {field:'remarks',title:'备注',width:'25%',align:'left'}
                            ]],
                            onResize:function(){
                                $('#tt-material-select').datagrid('fixDetailRowHeight',index);
                            },
                            onLoadSuccess:function(){
                                setTimeout(function(){
                                    $('#tt-material-select').datagrid('fixDetailRowHeight',index);
                                },0);
                            }
                        });
                        $('#tt-material-select').datagrid('fixDetailRowHeight',index);
                    },
                });
            }

问题:出在指定了展开后的显示高度,即在onExpandRow:function()设置了height:100
解决办法:不设置height高度即可(删除该行即可)

2、tree节点递归问题

关键字:JavaScript、EasyUI、tree

  • 父节点下有子节点时显示正常
  • 父节点下无子节点则出现递归

    源码:
```javascript
 // 左侧工程树
    $('#project-tree').tree({
        url:$CONFIG.base_url+'/api/project/tree?grade=10',
        method:'get',
        lines:true,
        onBeforeExpand:function (node,params) {
            // 这个操作导致新增第4,5级工号保存成功刷新左侧工程树时有问题,去掉
            // $("#project-tree").tree('options').url = $CONFIG.base_url + '/api/project/child?pid='+node.code;
        },
        onClick:function (node) {
            $('#tt-detail').datagrid('reload',{code:node.code});
            $('#parent-code').textbox('setValue',node.code);
        },
        onLoadSuccess:function (node,data) {
            if(data.length != 0){hasData = true}
            // 上级施工部位
            $('#form-parent-tree').combotree({
                lines:true,
                data:data,
                panelWidth:'15%',
                icons:[{
                    iconCls:'fa-icon fa fa-remove',
                    handler:function (e) {
                        $(e.data.target).combotree('clear');
                        $(this).css('visibility','hidden');
                        $('#parent-code').textbox('clear');
                    }
                }],
                onBeforeExpand:function (node,params) {
                    $("#form-parent-tree").combotree('tree').tree('options').url = $CONFIG.base_url + '/api/project/child?pid='+node.code;
                },
                onSelect:function (node) {
                    $('#form-parent-tree').textbox('getIcon',0).css({'visibility':'visible','line-height':'28px'});
                    $('#parent-code').textbox('setValue',node.code);

                    //编码自动生成
                    $.get($CONFIG.base_url+'/api/project/serial',{parentCode:node.code}).done(function (data) {
                        $('#project-code').textbox('setValue',data.no);
                    });
                }
            });

            // 消耗方式工程树
            $('#consume-tree').tree({
                method:'get',
                checkbox:true,
                lines:true,
                data:data
            });
        }
    });

加载的json:

问题: 源码本身没有问题,问题出在返回的json数据上。如果父节点(也有可能是最后一个节点)的state为closed时,点击节点会无线循环
解决方法: 把末节点State状态设为open可正常显示

参考: easyui tree树组件无限循环

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值