页面树结构

版本比较

标识

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

...

    原则上不允许直接覆盖js文件中的方法。
示例:在透视分析中字段菜单中新增一个自定义计算函数
原始做法:直接重写整个菜单初始化方法,在同期值菜单下增加子菜单项:交易日环比。

代码块
languagejs
linenumberstrue
collapsetrue
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);
}


    直接重写整个方法的方式原则不允许使用,因此需要认真理解整个方法的代码逻辑,考虑在方法执行之前或执行之后添加代码达到自己的目的。
优化过的实现方式:

代码块
languagejs
linenumberstrue
collapsetrue
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);
        }
    }
}

...