页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。


面板
borderColor#BBBBBB
bgColor#F0F0F0
borderWidth1
borderStylesolid

目录



1 说明

    接到需求,如果判断是产品不支持的,需要定制,首先得判断是在哪里插入什么功能,或者需要修改什么文件,因此我们需要先定位到具体的JS组件,然后再根据需要进行修改。下面从几个常用场景说明如何定位。

注意

注意:说明调试定位之前,请选好一个前端调试工具,现在各浏览器实际都自带了调试工具,网上搜索:IE 开发者工具、Chrome 开发者工具、 火狐开发者工具等等,都会有大量的教程,各开发者工具的使用都大同小异,本文以chrome 开发者工具为例。

2 JS组件的定位

    如果要更改现有js组件的内容、逻辑、布局或布局上文字,那就需要找到对应的js组件,找到对应js之后就可以参考修改Smartbi JS文件修改,主要有以下几种定位方式

2.1 调试快捷键

    Smartbi 提供了很多操作快捷键,可以便捷地定位代码位置,具体可见:调试快捷键

2.2 监控网络请求

    使用开发者工具中的网络功能监控网络请求,根据请求js名称或html布局文件名称猜测。

    Smartbi是按需加载js组件的,且每个组件基本都会有对应的同名html或.template文件,并且命名都有规范,具有相应功能意义,那实际要看功能对应的JS组件是哪个,只要在加载那个功能之前,监控网络请求,基本就能定位到对应的JS组件。

    以查找创建用户功能代码为例

    1)先刷新浏览器,保证是第一次打开创建用户界面(再次打开可能会有缓存而不再请求文件)。打开Chrome调试工具,在点击“新建用户”按钮之前,切换到Network(网络)标签页,先清空所有历史信息,然后点击“新建用户”按钮:

    Image Added

       譬如想查找业务主题编辑界面对应的js组件,那就可以打开chrome 开发者工具,切换到网络,在打开一个业务主题之前清空网络内容,然后再打开一个业务主题,从请求信息中就能大概猜出是哪个JS(有时因为某个js组件太常用会事先加载网路请求中也许找不到(但布局html文件基本一定是要渲染时才加载的),这时可能需要依赖相应的布局html文件名猜测对应的js组件):

       Image Removed

       4、方法四:前面三种方式都不好找时,还有个笨办法,就是上面说的,系统很多元素都会命名一个bofid、class,这个bofid或class的名称有时都是有意义的,先使用上面查找css的方法查找到对应的bofid或class,再全文搜索(只需搜索.html或.template文件)2)查找请求的文件,根据名称大概判断UserCreateAction.js文件接近新建用户功能:

    Image Added

    3)打开文件,在入口方法处添加debugger即可调试进入,判断是否为新建用户功能代码:

    Image Added

3 特殊属性查找

    在定制开发过程在,如果需要知道某个功能界面的逻辑,但不想用断点调试,或调试过程中代码隐藏较深,调试起来效率很慢,可以尝试查找界面上的关键DOM元素(即一般只会出现在该功能界面上的元素),看看是否存在特殊的属性,如bofid、class等属性,然后进行全文搜索,看看能否查找到界面对应的HTML模板文件,如果查找到即可确定对应的JS代码,在JS入口方法处添加debugger即可进行调试。

    之所以可以这么做是因为我们产品在设计上,一般遵循HTML代码与JS代码分离的规则,而HTML对应的JS代码在命名上会保持一致,如LoginView.html --> LoginView.jsExcelImportView.html --> ExcelImportView.js。因此查询元素属性时可先查询*.html, *.template(HTML模板文件的两种格式),查询不到,则可能该功能界面没有使用模板,可能是JS代码动态生成的,此时可再考虑用属性值查找*.js

3.1 示例:查找HTML模板

    以查找Excel导入模板功能为例:

    Image Added

    复制bofid="ssreporttemplate",全文查找*.template, *.html文件:

    Image Added

    查找完成后,发现可以唯一查找到一条匹配记录:

    Image Added

    打开查找到的文件,比对模板的结构与实际界面上的结构是否一致。

    Image Added

     Image Added

3.2 示例:查找JS文件

     以查找定制管理快捷入口界面功能代码为例:

    Image Added

    先复制class="superviseDefaultCommand_block",全文搜索*.template, *.html文件,会发现没有搜索到结果,此时可考虑该class是JS代码动态赋予的,考虑用属性值全文搜索*.js

    Image Added

    查找完成后,发现可以唯一查找到一条匹配记录,打开文件后,即可查看功能的代码逻辑,如需调试,在方法入口处添加debugger即可:

    Image Added