this
внутри функции обратного вызова XHR ссылается на объект XHR.Единственный способ обратиться к bb_obj
- это непосредственная ссылка на созданный объект в той же области действия, что и функция.Поскольку объекты передаются по ссылке, приведенный ниже код работает как задумано.
Обратите внимание, чтобы избежать путаницы, я объявил объект, используя var bb_obj_obj={}
.Свойство bb_obj
относится к bb_obj_obj
:
bb_obj_obj.message
изменено bb_obj
указывает на bb_obj_obj
, следовательно, bb_obj.message
относится к той же переменной
Код:
var bb_obj_obj = {}; //new Object
dojo.declare("sop.quote", null,
{
bb_obj : bb_obj_obj,
stage1 : function()
{
dojo.xhrPost(
{
url : 'go/module_service/transport.php',
content : this.bb_obj,
handleAs : 'xml',
load : function(xml)
{
var status = xml.getElementsByTagName("STATUS")[0].childNodes[0].nodeValue;
var message = xml.getElementsByTagName("MESSAGE")[0].childNodes[0].nodeValue;
bb_obj_obj.message = message; //Without `this`
},
error : function()
{
}
}
}
}
Альтернативный метод состоит в сохранении this
в переменной, например.$this
:
...
stage1 : function()
{
var $this = this;
dojo.xhrPost({
...
load : function(xml){
var status = xml.getElementsByTagName("STATUS")[0].childNodes[0].nodeValue;
var message = xml.getElementsByTagName("MESSAGE")[0].childNodes[0].nodeValue;
$this.bb_obj.message = message; //Using `$this` instead of `this`
},
...