2016-10-28 134 views
0

我没有在文档中找到如何从嵌套的require块中访问类的方法的局部变量。在嵌套的require块中访问局部变量/方法?

declare("Clust", StrictIntHashMap, 
    {  
     constructor : function() 
     { 

     }, 

     cust : function(custId) 
     { 
      return this.get(custId); 
     }, 

     add : function(custObject) 
     { 
      this.set(custObject.custId, custObject); 
     }, 

     reloadThecustses : function() 
     { 
      that = this; 
      require([ 'inst/DataExtractor', 'inst/ClustTree' ], function (de, theTree) 
      { 

       de.getPlainJSON(Commandz.COMMAND_GET_CUSTS, 
       function (dataR) 
       { 
        that.add(new Customer(dataR.root[c])); // not working 
        this.cust(0); // not working 

        theTree.refreshTheData(dataR.root); 

       }); 

      }); 
     } 


    });  

    return Clust; 
  • 如何访问该方法从需要块内的类的“添加”?
  • 如何从require块中访问本地变量“that”?
+0

你运行什么确切的测试代码来声明它“不工作”? – Louis

+0

Custs.js:60 Uncaught ReferenceError:没有定义,如果我删除它并将其替换为“this.add(whatever)”,它会变为“Custs.js:61 Uncaught TypeError:无法读取属性'add'undefined “ –

+1

但是''''是在你的代码中定义的。你用'that = this'来定义它。你应该真的有'var that = this',因为如果没有'var',你把它放在全局空间中,这是不好的编码,但它*是*定义的。 – Louis

回答

1

当使用require时,您应该能够访问在父范围中定义的变量,因为它相当于只具有子范围。

我不完全确定你想要访问什么,但我认为它是Clust实例。

请问这段代码适合你吗?

declare("Clust", StrictIntHashMap, {  
    constructor : function() { 
    }, 
    cust : function(custId) { 
     return this.get(custId); 
    }, 
    add : function(custObject) { 
     this.set(custObject.custId, custObject); 
    }, 
    reloadThecustses : function() { 
     var clustInstance = this; 
     require([ 'inst/DataExtractor', 'inst/ClustTree' ], 
     function (de, theTree) { 
     de.getPlainJSON(Commandz.COMMAND_GET_CUSTS, function (dataR) { 
      clustInstance.add(new Customer(dataR.root[c])); 
      clustInstance.cust(0); 
      theTree.refreshTheData(dataR.root); 
     }); 
    }); 
    } 
});  

return Clust; 
1

也许问题是由回调函数中的错误上下文导致getPlainJSONdojo.hitch()将修复此问题:

reloadThecustses : function() 
    { 
     require([ 'inst/DataExtractor', 'inst/ClustTree', 'dojo/_base/lang' ], function (de, theTree, lang) 
     { 
      de.getPlainJSON(Commandz.COMMAND_GET_CUSTS, 
      lang.hitch(function (dataR) 
      { 
       this.add(new Customer(dataR.root[c])); // not working 
       this.cust(0); // not working 

       theTree.refreshTheData(dataR.root); 

      }, this) 
     }); 
    }