2011-10-09 53 views
0

我试图在我的模块内进行+1次点击注册,该模块被封装为一个匿名函数。点击处理程序可以作为一个对象吗?

为此,我创建了一个全局对象MyModule,并通过它导出了我的Click处理函数。问题是 - 我的点击处理程序没有被调用。

Live demo。代码:

// 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()?

回答

1

谷歌很可能在他们的代码编写

window[callback](); 

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

0

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

+0

您的术语不正确。 – SLaks

相关问题