2013-03-30 18 views
3

我有一些奇怪的問題,當我把一個模塊內的回調函數,該庫似乎無法找到的功能,所以如果我使用:Google+的簽到回調函數,如果一個模塊內

var Auth = (function() { 
    var gPlusSignCallback = function() { 
     console.log("Google plus signin call back done!"); 
    }; 

    return { 
     gPlusSignCallback: gPlusSignCallback 
    }; 
}()); 

而在剪斷的Google+帳戶登錄按鈕的HTML我使用:

data-callback="Auth.gPlusSignCallback" 

我得到以下錯誤:

Callback function named "Auth.gPlusSignCallback" not found

如果我把gPlusSignCallback放在模塊外部,一切正常。我檢查了文檔,它說這個值必須是全局命名空間中的一個函數。那麼它是不是通過設計工作?我需要使全局變量引用模塊中的函數嗎?

回答

6

登錄回調必須是小部件找到它的全局函數。包裝你的回調爲這樣:

function onSigninCallback(e){ 
    Auth.gPlusSignCallback(e); 
} 
+0

是的,這就是我最終做的。很好奇,是否有任何具體原因呢? – jasalguero

+0

原因是登錄按鈕使用字符串來指定功能。因此,沒有乾淨的(例如不使用eval)方式通過字符串獲取非全局/私有閉包函數引用。 正如Silvano提到的,如果你不想要全局回調,你可以直接使用JavaScript進行渲染而不是標記。 – class

2

另一種方法是使用Javascript API呈現按鈕。如果你這樣做,你可以傳遞一個函數的引用作爲回調。 This is來自PhotoHunt端到端Google+平臺示例應用程序的示例。

相關問題