代码之家  ›  专栏  ›  技术社区  ›  Hiren Solanki

Dynamics 365功能区按钮中JS的奇怪命名空间上下文行为

  •  0
  • Hiren Solanki  · 技术社区  · 4 年前

    我为Dynamics 365功能区按钮点击事件编写了以下Javascript代码。

    var SampleNamespace = SampleNamespace || {};
    SampleNamespace = {
     someVariable : 'xyz',
     clickMeFromRibbon: function(){
      // this = window in classic UI | this.iWillDoSomething() - Error
      // this = SampleNamespace in Modern UUI | this.iWillDoSomething() - Works fine
     },
     iWilDoSomething : function(){
      // Doing some other helper operations
     }
    }
    

    在Ribbon按钮中单击我指定了要调用的以下函数

    SampleNamespace.clickMeFromRibbon
    

    知道为什么参考 this 这是不同的,我们如何在这两种环境中使用有效的命名空间来解决这个问题?

    PS:我在javascript中尝试了多种不同的命名空间,但都出现了同样的问题。

    0 回复  |  直到 4 年前
        1
  •  1
  •   Andrew Butenko    4 年前

    您可以使用不同的方式处理命名空间,这对我来说很好:

    var SampleNamespace = (function(){
        var someVariable = "xyz";
    
        function clickMeFromRibbon(){
            //you can call iWilDoSomething from here without using namespaces
        }
    
        function iWilDoSomething(){
        }
    
        return {
            clickMeFromRibbon: clickMeFromRibbon,
            iWilDoSomething: iWilDoSomething
        };
    })();
    
    //Also SampleNamespace.clickMeFromRibbon and SampleNamespace.iWilDoSomething are available externally