...
原则上不允许直接覆盖js文件中的方法。
示例:在透视分析中字段菜单中新增一个自定义计算函数
原始做法:直接重写整个菜单初始化方法,在同期值菜单下增加子菜单项:交易日环比。
代码块 | ||||||
---|---|---|---|---|---|---|
| ||||||
FieldsSpace.prototype.initFuncMenu = function() { var PopupMenu = jsloader.resolve("freequery.menu.PopupMenu"); this.funcPopupMenu = new PopupMenu(document.body, this); this.measureCalculationMenu = this.funcPopupMenu.createMenuItem("${TimeCalculation}"); var corrMenu = this.measureCalculationMenu.createMenuItem("${CorrespondingPeriod}"); ... ... //EPPR-14950 begin edit by qiushitong 2017-12-11 //添加到同期菜单下 corrMenu.createMenuItem("交易日环比", "PreValueDealCompare", null); //EPPR-14950 end edit by qiushitong 2017-12-11 ... ... var removeFieldMenu = this.funcPopupMenu.createMenuItem("${Delete}", "removeField", null); } |
直接重写整个方法的方式原则不允许使用,因此需要认真理解整个方法的代码逻辑,考虑在方法执行之前或执行之后添加代码达到自己的目的。
优化过的实现方式:
代码块 | ||||||
---|---|---|---|---|---|---|
| ||||||
FieldsSpace.prototype.initFuncMenu_old180720 = FieldsSpace.prototype.initFuncMenu; FieldsSpace.prototype.initFuncMenu = function() { this.initFuncMenu_old180720(); if (this.measureCalculationMenu && this.measureCalculationMenu.menuItems) { var preMenu = this.measureCalculationMenu.menuItems.menuItems[1]; // get previous menu if (preMenu && preMenu.createMenuItem) { preMenu.createMenuItem("交易日环比", "PreValueDealCompare", null); } } } |
...