Coffeescript, API JS для Facebook и область применения - PullRequest
1 голос
/ 05 декабря 2011

Я использую Coffeescript и загружаю API Facebook JS асинхронно, как они предлагают в своей документации. Вот так:

#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(), но не уверен, что это лучший способ.

Есть ли способ загрузить содержимое Facebook в контексте анонимной функции-оболочки Coffeescript?

Ответы [ 2 ]

1 голос
/ 05 декабря 2011

Это не проблема области.Если вы посмотрите на скомпилированный JS, вы увидите var doSomething, объявленный в верхней части файла.Кроме того, doSomething устанавливается на правильное значение до window.FBAsyncInit.

1 голос
/ 05 декабря 2011

Вы правы, считая, что вы не должны загрязнять глобальное пространство имен.Один из способов сохранить чистую среду (получить ее :) - это использовать класс и хранить там свои функции 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()

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...