优雅的Dojo - 内部方法调用

时间:2015-03-21 23:42:47

标签: javascript dojo

我是dojo的初学者,我试图将我的一些接口代码移到一个类中,只是为了让方法不在我的主文件中。

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

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

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

但是我无法弄清楚如何在toggleGraphWindow函数中使用这些函数。 (由于背景?)

如果我试图打电话:

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

它在线上崩溃了:

  this.showGraphWindow()

this.hideGraphWindow()

使用:“未定义不是函数”

如何编码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()}
        }
    });
});

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

多谢你们两个,你们确实是对的Ken,我多次读过这篇类似的帖子,并且不知道怎么理解答案:

Calling object methods internally in dojo

在阅读了你发布的内容之后,我已经以某种方式理解了上面链接的答案,现在明白我的问题是什么!谢谢大家。

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

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);

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