0

オブジェクトに「インスタンス」変数を​​作成したり、オブジェクトの関数がイベントハンドラーとして呼び出されたときに、オブジェクトに「インスタンス」変数を​​参照したりするのに問題があります。以下は私が使用しているコードです。それが重要な場合は、(明らかに)道場を使用しています。私が直面している問題は私のケースに固有のものですか?道場特有ですか?それとも、私は完全に不適切な方法で問題に取り組んでいますか?

dojo.declare("DynDraw", esri.toolbars.Draw, {
  constructor: function () {
    this.myLocalMap = arguments[0];
  }
  , myLocalMap: null
  , subscribed: false
  , activate: function (geometryType, options) {
    this.inherited(arguments);
    dojo.connect(this.myLocalMap, "onMouseDown", this.DynDraw_Map_OnMouseDown);
  }
  , DynDraw_Map_OnMouseDown: function (event) {
    //when called as an event handler (assigned above) “this.subscribed” is undefined
    //”this” seems to be “myLocalMap”, not the “DynDraw” object
    //when called as a “function” “this.subscribed” has a 
    if (this.subscribed == false) {
      dojo.connect(this.myLocalMap, "onMouseMove", this.DynDraw_Map_OnMouseMove);
      this.subscribed = true;
    }
  }
  , DynDraw_Map_OnMouseMove: function (event) {
      console.log("DynDraw_Map_OnMouseMove");
  }
});
4

1 に答える 1

0

を使用する必要がありますdojo.hitch。これにより、スコープが関数にヒッチハイクします。

dojo.connect(this.myLocalMap, "onMouseDown", 
    dojo.hitch(this, this.DynDraw_Map_OnMouseDown));

http://dojotoolkit.org/reference-guide/1.7/dojo/hitch.html

于 2013-01-16T14:56:07.677 に答える