我正在使用 Coffeescript 并异步加载 Facebook JS api,正如他们在其文档中所建议的那样。像这样:
#Load the FB api asynchronously
(->
e = document.createElement("script")
e.async = true
e.src = document.location.protocol + "//connect.facebook.net/en_US/all.js"
document.getElementById("fb-root").appendChild e
)()
doSomething = () ->
# I'd like to call this from the FB context
window.fbAsyncInit = ->
FB.init
appId: fb_app_id
status: true
cookie: true
xfbml: true
oauth: true
# Doesn't work. Is out of scope.
doSomething()
随着 Facebook 内容附加到 window
,我无法访问 Coffeescript 的匿名包装函数上下文中的内容。
我知道我可以将我的函数定义为 window.doSomething()
,但我不确定这是否是最好的方法。
有没有办法在 Coffeescript 的匿名包装函数的上下文中加载 Facebook 内容?
最佳答案
您认为不应污染全局 namespace 的想法是对的。继续拥有干净环境的一种方法(了解它 :) 是使用一个类并在其中保留您的 Facebook 特定功能。
这可能有助于您入门:
class MyFacebookApp
constructor: ->
doSomething: () ->
console.log "I'm doing something over here."
window.myFacebookApp = new MyFacebookApp()
window.fbAsyncInit = ->
FB.init
appId: fb_app_id
status: true
cookie: true
xfbml: true
oauth: true
myFacebookApp.doSomething()
祝你好运!
关于javascript - Coffeescript、Facebook JS API 和范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8390640/