1

dojoのamd用のカスタムモジュールがあります。これは次のようになります。

define(
  "my/moduleName",
  [//dependencies], 
  function(xhr) {
    return {
      method1: function() {
        xhr.get({
          url: "myurl",
          load: function(data) {
            //handle data
            this.method2(data) //< THIS CAUSES ERROR: 'this.method2 is not a function'
          }
        });
      },

      method2: function(data) {
        //process data
      }
    }
}

私の問題はxhr.get、遅延オブジェクトを作成することでありmethod2、そのオブジェクトではなく、「my/module」オブジェクトで定義されているのではないかと思います。

完了後にmethod1電話をmethod2かけるにはどうすればよいですか?xhr

4

1 に答える 1

1

関数コンテキスト内に入るとxhrオブジェクトになるため、現在のthisコンテキストを保存する必要があります。loadthis

一般的な規則は、必要に応じて他のクロージャ内でvar that = this;使用することです。that

次のように、通話thisの前に保存します。

define(
    "my/moduleName", [ //dependencies], 
function (xhr) {
    return {
        method1: function () {
            var that = this; //<-- store this context

            xhr.get({
                url: "myurl",
                load: function (data) {
                    //handle data
                    that.method2(data); //<-- use that , the stored context
                }
            });
        },

        method2: function (data) {
            //process data
        }
    }
}

デモ-this後で別のクロージャーで使用するために


于 2013-03-05T16:29:16.470 に答える