Может ли обработчик кликов быть объектом? - PullRequest
0 голосов
/ 09 октября 2011

Я пытаюсь зарегистрироваться на +1 клик внутри моего модуля, который обернут как анонимная функция.

Для этого я создал глобальный объект MyModule и экспортировал свою функцию обработчика кликов черезЭто.Проблема в том, что мой обработчик кликов не вызывается.

Живая демоверсия .Код:

// Initialize +1 button
gapi.plusone.go();


(function(){
  window.MyModule = {};

  function plusOneClicked() {
    alert("+1!");
  }

  window.MyModule.plusOneClicked = plusOneClicked;
})()

...

<g:plusone callback='window.MyModule.plusOneClicked'></g:plusone>

Когда я предоставляю в качестве обратного вызова внешнюю функцию, единственной целью которой является переадресация вызовов в window.MyModule.plusOneClicked, она работает:

function foo() {
  window.MyModule.plusOneClicked();
}
...
<g:plusone callback='foo'></g:plusone> 

Почему быокно пропуска обработчика щелчков. MyModule.plusOneClicked (), но найти foo ()?

Ответы [ 2 ]

1 голос
/ 09 октября 2011

Google, вероятно, пишет

window[callback]();

в их коде.

Для этого требуется, чтобы строка callback ссылалась на свойство window, а не на свойство другого объекта.

0 голосов
/ 09 октября 2011

Я полагаю, потому что callback ожидает прямой обработчик метод (как в foo()), а не ссылка (как в window.MyModule.plusOneClicked). Таким образом, по сути, вы не можете просто назначить такую ​​ссылку для обработчика кликов, но написать метод (обертку) в качестве обработчика и заставить его выполнить необходимый вызов.

...