Dojo.hitch () вопрос об объеме - PullRequest
       17

Dojo.hitch () вопрос об объеме

2 голосов
/ 31 августа 2011

Почему, когда я использую функцию dojo.hitch и пытаюсь ссылаться на оператор "this" внутри нее, он дает мне ссылку на неправильный объект?

console.debug(dijit.byId("widgetName"));  //works as expected and prints out the window object

dojo.hitch(dijit.byId("widgetName"), tester())();   //this should be executing the tester function in the scope of the widget object

function tester() {
    console.debug(this);    //prints out the Javascript Window object instead of the widget object!!!!
}

Спасибо

1 Ответ

6 голосов
/ 31 августа 2011

Исходя из того, что вы только что показали, теперь я могу смело дать ответ, объясняющий, что не так.

Когда вы делаете dojo.hitch(), вы не должны вызывать функцию внутри него, а вместо этого вызывать результат функции.То есть вам нужно предоставить dojo.hitch ссылку на функцию, которую нужно подключить, а не результат вызова этой функции.

В вашем примере вы вызываете tester() (которая вызывает функцию tester) внутри dojo.hitch(), который вызывает tester один раз.Даже если у вас есть dojo.hitch()();, потому что tester() не возвращает обработчик функции (но результат tester, в данном случае undefined), hitch()(); ничего не делает.Это может сбить с толку, поэтому я покажу вам пример.

Не делайте этого:

dojo.hitch (context, handler ()) ();

Вместо этого сделайте следующее:

dojo.hitch (context, handler) ();

Поэтому, чтобы сделать то, что у вас очень читабельно, вы бысделайте это:

widget = dijit.byId("widgetName"); 
tester = function() {
    console.log(this);
}

handle = dojo.hitch(widget, tester);
handle();

Ваша ошибка - попытка вызова функции из dojo.hitch().Эта ошибка также не присутствовала в вашем первоначальном вопросе.

...