2016-11-02 7 views
0

私はtypescriptが新しくなっていますが、これは何よりもjavascriptの問題だと思います。具体的には、何かを達成する方法の理解が不足しています。コールバック関数のクラス変数を変更する

コールバックにクラスレベルの変数を設定する必要があります。その方法についてはわかりません。私のtypescriptクラスには、太い矢印の関数を持つメソッドがあります。コールバック関数を使用してajaxリクエストを行うオブジェクトを呼び出します。

このコールバックでは、クラスに値を設定したいと考えています。一言で言えば、これは私が持っているものされています。もちろん、コールバックで「これは」ウィンドウではなく、私のクラスを参照するため

class MyClass extends SomeOtherClass { 
protected entity = new Entity(); 

protected getToolbar() { 
    toolbarbuttons.push({ 
     title: 'hello', 
     onClick:() => { 
      outsideService.makeAjaxCall(
       { 
        url: 'somewhere_in_cyberspace' 
       }, 
       function (response) { 
        this.entity.name = response.Name; 
       } 
      ); 
     }  
    }); 
    } 
} 

このコードは、そのままでは動作しません。

私のonClickハンドラの前に_that = thisの行に沿って何かしようとしましたが、ハンドラが終了した後の応答値は得られません。this.entity.nameコールバックが設定したものではありませんか?私はここでやりたいことや何かを逃したことがありますか?

+1

コールバックを矢印機能にしてみましたか?現時点では、 'this.entity.name = response.Name'のところにあるビットは'(response)=> {... 'のようなものではなく' function'宣言の中にあります。それは問題かもしれない – theRealRobG

+0

私はそれを試してみるよ、ありがとう。 – jkj2000

答えて

1

第二の機能はまた、矢印機能する必要があります:あなたはtypescriptですが、定期的に匿名の一つに矢印機能を変換するが、それは保存されます見ることができるように

var MyClass = (function (_super) { 
    __extends(MyClass, _super); 
    function MyClass() { 
     _super.apply(this, arguments); 
     this.entity = new Entity(); 
    } 
    MyClass.prototype.getToolbar = function() { 
     var _this = this; 
     toolbarbuttons.push({ 
      title: 'hello', 
      onClick: function() { 
       outsideService.makeAjaxCall({ 
        url: 'somewhere_in_cyberspace' 
       }, function (response) { 
        _this.entity.name = response.Name; 
       }); 
      } 
     }); 
    }; 
    return MyClass; 
}(SomeOtherClass)); 

class MyClass extends SomeOtherClass { 
    protected entity = new Entity(); 

    protected getToolbar() { 
     toolbarbuttons.push({ 
      title: 'hello', 
      onClick:() => { 
       outsideService.makeAjaxCall({ 
        url: 'somewhere_in_cyberspace' 
       }, (response) => { 
        this.entity.name = response.Name; 
       }); 
      } 
     }); 
    } 
} 

これはにコンパイルされます最も内側の関数の内部で使用される参照var _this = this;である。

関連する問題