在嵌套的需求块中访问局部变量/方法?

时间:2016-10-28 09:10:55

标签: dojo requirejs amd

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

    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块中的类?
  • 如何访问本地变量""来自require块?

2 个答案:

答案 0 :(得分: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 :(得分: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 )
        } );
    }