我正在尝试使用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"
但看起来事件没有发生。是什么给了什么?
答案 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