2

我有以下代码:

define(["dojo/_base/declare"],function (declare) {
   return declare("tamoio.Map", null, {

     methodA: function(param){
        console.log(param);
        this.methodB('xxx',function(){
          this.methodC(); //it didn't call!
        });
     },

     methodB: function(text, callback){
       alert('do nothing: ' + text);
       callback();
     },

     methodC: function(){
       alert('hello');
     }

   });
});

当我运行我的应用程序时,我收到了消息:

Uncaught TypeError: Object [object global] has no method 'methodC'

如何在我的模块中调用内部方法?

我正在使用 Dojo 1.9.1

此致,

仁南

4

1 回答 1

3

您收到此错误是因为您的回调函数正在全局范围(窗口)中执行,并且没有调用methodC定义的函数。您需要methodC在小部件的范围内执行,有两种方法可以执行此操作:

1.) 利用 JavaScript 闭包:

 methodA: function(param){
   console.log(param);
   var self = this;   // Create a reference to the widget's context.
   this.methodB('xxx',function(){
     self.methodC();  // Use the widget scope in your anonymous function.
   });
 } 

2.) 利用dojo/_base/lang模块的hitch方法:

 methodA: function(param){
   console.log(param);
   this.methodB('xxx', lang.hitch(this, function(){
     this.methodC(); 
   }));
 } 

hitch方法返回一个将在提供的上下文中执行的函数,在本例中是this(小部件)。

于 2013-07-26T19:49:36.307 回答