使用Keen.io和CoffeeScript不起作用?

时间:2014-01-02 23:41:04

标签: javascript coffeescript

我正在尝试使用Keen.io,我将他们的JS转换为咖啡,如下所示:

# Keen init
Keen = Keen or
  configure: (e) ->
    @_cf = e

  addEvent: (e, t, n, i) ->
    @_eq = @_eq or []
    @_eq.push([e, t, n, i])

  setGlobalProperties: (e) ->
    @_gp = e

  onChartsReady: (e) ->
    @_ocrq = @_ocrq or []
    @_ocrq.push(e)

(->
  e = document.createElement("script")
  e.type = "text/javascript"
  e.async = not 0
  e.src = ((if "https:" is document.location.protocol then "https://" else "http://")) + "dc8na2hxrj29i.cloudfront.net/code/keen-2.1.0-min.js"

  t = document.getElementsByTagName("script")[0]
  t.parentNode.insertBefore e, t
)()

Keen.configure myParams

Keen.addEvent "script_tag_init"

但看起来事件没有发生。是什么给了什么?

2 个答案:

答案 0 :(得分:4)

是的,那就是问题所在。由于CoffeeScript将如何编译,Keen对象将不会对全局范围可见。

初始化后“导出”Keen到窗口将起作用。

或者,您可以直接在窗口对象上初始化Keen:

# Keen init
window.Keen =
  configure: (e) ->
    @_cf = e
  ...

注意:此方法确实排除检查页面上是否已存在Keen,这是一个角落案例性能优化,对大多数应用程序来说不是必需的。换句话说它应该没问题。

答案 1 :(得分:2)

由于coffee将所有东西都包装在一个闭包中,你需要在调用configure之后包含它:

# Keen works with variable as it is attached to window
window.Keen = Keen