2013-03-01 36 views
1

我使用 dojo/reqeust delcare進行測試。如何檢索dojo中的類成員/請求承諾

我聲明瞭一個新的類,該函數將使用dojo/request進行查詢。在promise函數中,我無法檢索這個成員。

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

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

如上所述,當交返回時,警報(this.name)調用。但是這個指向窗口對象,所以這個.name是未定義的,未指向 TestJson.name。那麼我如何檢索TestJson.name?謝謝!

回答

2

有幾種方法可以解決這個問題。

引用變量在封閉範圍:

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

使用dojo/_base/lang模塊set the execution context的回調:

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

謝謝。第一種方法行不通,但第二種方法行得通。 – Kinorsi 2013-03-06 11:19:27