Classy Dojo - 内部方法调用

Classy Dojo - Internal method calls

我完全是 dojo 的初学者,我正试图将我的一些界面代码移到 class 中,只是为了将这些方法排除在我的主文件之外。

我的问题 - 我无法将内部 class 函数用作其他函数的一部分。

如图所示,在外部文件中创建接口对象后,我能够成功:

appInterface = new (interface)
appInterface.showGraphWindow()
appInterface.hideGraphWindow()

但是我不知道如何在 toggleGraphWindow 函数中使用这些函数。 (由于上下文?)

如果我尝试调用:

 on(registry.byId("graphBtn"),"click", appInterface.toggleGraphWindow);

线上崩溃:

  this.showGraphWindow()

this.hideGraphWindow()

有:"Undefined is a not a function"

如何编写 toggleGraphWindow 函数的代码

Iterface.js

 define([
    "dojo/_base/declare",
    "dojo/on",
    "dijit/registry"
      ], 
  function(
    declare,
    on,
    registry
    ){
    return declare (null, {
        hideGraphWindow : function () {
            dijit.byId("graphWindowMain").domNode.style.display = 'none';  
            dijit.byId("applicationWindow").resize();   
        },
        showGraphWindow : function () { 
            dijit.byId("graphWindowMain").domNode.style.display = 'block';  
            dijit.byId("applicationWindow").resize();
        },
        toggleGraphWindow : function (){
                if (dijit.byId("graphBtn").checked ==  true)
                    {this.showGraphWindow()}
                else 
                    {this.hideGraphWindow()}
        }
    });
});

怎么了

    toggleGraphWindow : function (){
            if (dijit.byId("graphBtn").checked ==  true) {
                this.showGraphWindow();
            }
            else {
                this.hideGraphWindow();
            }
    }

?

感谢你们两位,你们确实是对的,Ken,类似的post我已经读了很多遍了,但不知何故不明白其中的答案:

Calling object methods internally in dojo

阅读您 post 的内容后,我以某种方式理解了上面链接的答案,现在明白了我的问题所在!感谢大家。

我通过修改主应用程序中的代码来修复它,如下所示:

var appInterface = new Interface();
on(registry.byId("graphBtn"),"click", appInterface.toggleGraphWindow);

更改为:

var appInterface = new Interface();
var graphToggle = dojo.hitch(appInterface, "toggleGraphWindow");
on(registry.byId("graphBtn"),"click", graphToggle);

我认为错误的原因是运行时的 "this" 对象实际上是 "graphBtn" 而不是 appInterface。