1

dojo/reqeustdelcareを使用してテストを行います。

dojo/request を使用してクエリを作成する関数を含む新しいクラスを宣言します。promise 関数では、thisメンバーを取得できません。

   var TestJson = declare(null, {
       name: "hello",
       doJson: function(){
          request.post("someTarget").then(function(res){
             alert(this.name);
          });
       }
  });

   var obj= new TestJson();
   obj.doJson();

上記のように、post が返されると、alert(this.name)が呼び出されます。ただし、これはWindowオブジェクトを指しているため、 this.nameは定義されておらず、TestJson.nameを指していません。では、TestJson.name を取得するにはどうすればよいでしょうか。ありがとう!

4

1 に答える 1

2

この問題を解決するには、いくつかの方法があります。

クロージャー スコープ内の変数を参照します。

var TestJson = declare(null, {
  name: "hello",
  doJson: function(){
    var instance = this;
    request.post("someTarget").then(function(res){
      alert(instance.name);
    });
  }
});

dojo/_base/langモジュールを使用して、コールバックに実行コンテキストを設定します。

var TestJson = declare(null, {
  name: "hello",
  doJson: function(){
    var callback = lang.hitch(this, function(res){
      alert(this.name);
    });
    request.post("someTarget").then(callback);
  }
});
于 2013-03-01T10:38:33.453 に答える