0

我正在尝试从我的模块中注册 +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> 

为什么单击处理程序会错过 window.MyModule.plusOneClicked(),但找到 foo()?

4

2 回答 2

1

谷歌可能正在写作

window[callback]();

在他们的代码中。

这要求callback字符串引用 的属性window,而不是另一个对象的属性。

于 2011-10-09T14:10:57.300 回答
0

我相信因为callback需要一个直接的处理程序方法(如foo())而不是引用(如window.MyModule.plusOneClicked)。所以基本上,您不能简单地将这样的引用分配给单击处理程序,而是编写一个(包装器)方法作为处理程序并让它执行必要的调用。

于 2011-10-09T14:08:01.750 回答