针对 Java 开发人员的 Dojo 概念(4)
来源:优易学  2011-11-18 14:00:03   【优易学:中国教育考试门户网】   资料下载   IT书店

图 5. 在 Dojo 中缺失上下文的输出

尽管 targetArray 并不是在函数包围的上下文中定义的,但是可以将上下文定义为参数传递给 Dojo 函数。这意味着 this 关键字可以访问在该上下文中声明的任何对象(包括函数)。清单 11 显示了正确的实现(注意,增加的代码用粗体表示)。

清单 11. 在 Dojo 中设置正确的上下文

dojo.declare(
    "myClass",
    null,
    {
        targetArray: null,
        constructor: function(source) {
        // Initialise in constructor to avoid making global
                         this.targetArray = []; 

        // Copy each element from source into target...
                         dojo.forEach(source, 
                                    function(item) {
         this.targetArray[this.targetArray.length] = item;
                                    }, this);
                     },
    }
);

上下文并不总是作为 Dojo 函数签名中的相同参数传递的:

在 dojo.subscribe 中,上下文是在函数声明之前传递的(参见清单 12)。

在 dojo.connect 中,应该分别提供定义 trigger 方法和 target 方法的上下文。清单 13 展示了一个例子,其中 obj1 定义 methodA 的上下文,而 obj2 定义 methodB 的上下文。对 obj1 调用 methodA 将导致对 obj2 调用 methodB。

清单 12. 在 dojo.subscribe 中设置上下文

dojo.declare(
    "myClass",
    null,
    {
        subscribe : function() {
           dojo.subscribe("publication",
            this, 
          function(pub) { 
         this.handlePublication(pub);
               });
                    },

        handlePublication : function(pub) {
         console.log("Received: " + pub);
                            }
    }
);

清单 13. 在 dojo.connect 中设置上下文

dojo.connect(obj1, "methodA", obj2, "methodB");

结束语

已习惯构化 Java 代码环境的开发人员将很难适应 JavaScript。但是 Dojo 提供了类声明功能,使向客户端开发过渡变得非常简单。充分理解上下文,以及何时、如何设置上下文,将为 Java 开发人员省去很多麻烦,并帮助他们自信地将 JavaScript 添加到自己的工具箱中。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训