Google Analytics代码使用全局_gaq
对象作为分析命令。他们建议检查这样的对象是否已经存在,如下所示:
var _gaq = _gaq || [];
// Command
_gaq.push(['_trackPageview']);
在CoffeeScript中,这看起来像这样:
_gaq = _gaq or []
编译到这个:
(function() {
var _gaq;
_gaq = _gaq || [];
}).call(this);
如何编写导致上述Javascript行为的CoffeeScript代码?
答案 0 :(得分:3)
要在全局范围中使_gaq
变量可用,您可以在coffeescript中写这个:
_gaq = window._gaq ?= []
javascript输出:
var _gaq, _ref;
_gaq = (_ref = window._gaq) != null ? _ref : window._gaq = [];
这样你就可以调用_gaq.push(['_trackPageview']);
stackoverflow中有another question,它讨论了您可能想要检查的coffeescript中的全局变量。
答案 1 :(得分:1)
如果变量优先不存在,您可以有条件地为变量赋值:
window._gaq ?= []
这里有两件棘手的事情:
请注意,我引用了window._gaq
。 Google AnalyticsJavaScript直接在_gaq
对象上附加window
对象。有关详细信息,请参阅:http://coffeescript.org/#lexical-scope
观察?=
运算符。这是CoffeeScript的存在运算符,它提供比||=
更安全的条件赋值。有关更多信息,请访问Google“CoffeeScript存在运营商”。 (我会直接链接你,但我不能发布另一个链接,因为我还没有足够的声望点。)
最后,我在咖啡网中汇总了我用于Google Analytics跟踪的要点:https://gist.github.com/brainix/4394158
答案 2 :(得分:0)
你可以这样做:
_gaq?.push ['_code']
将编译为:
// Generated by CoffeeScript 1.6.2
(function() {
if (typeof _gaq !== "undefined" && _gaq !== null) {
_gaq.push(['_code']);
}
}).call(this);