2

Google Analytics 的代码对分析命令使用全局_gaq对象。他们建议检查这样的对象是否已经存在,如下所示:

var _gaq = _gaq || [];
// Command
_gaq.push(['_trackPageview']);

在 CoffeeScript 中,这看起来像这样:

_gaq = _gaq or []

编译为:

(function() {
    var _gaq;
    _gaq = _gaq || [];
}).call(this);

如何编写会导致上述 Javascript 行为的 CoffeeScript 代码?

4

3 回答 3

3

要使_gaq变量在全局范围内可用,您可以在 coffeescript 中编写:

_gaq = window._gaq ?= []

javascript输出:

var _gaq, _ref;
_gaq = (_ref = window._gaq) != null ? _ref : window._gaq = [];

这样你就可以稍后调用_gaq.push(['_trackPageview']);

stackoverflow 中还有一个问题是关于您可能想要检查的咖啡脚本中的全局变量。

于 2013-05-02T12:15:58.523 回答
1

您可以有条件地为变量赋值,前提是它不像这样优雅地存在:

window._gaq ?= []

这里有两件棘手的事情:

  1. 请注意,我引用的是window._gaq. Google Analytics JavaScript 将_gaq对象直接附加到对象上window。有关详细信息,请参阅:http ://coffeescript.org/#lexical-scope

  2. 观察?=操作员。这是 CoffeeScript 的存在运算符,它提供了比||=. 有关更多信息,请在 Google 中查找“CoffeeScript 存在运算符”。(我会直接链接你,但我不能发布另一个链接,因为我还没有足够的声望点。)

最后,我在这里整理了一个用于在 CoffeeScript 中进行 Google Analytics 跟踪的要点:https ://gist.github.com/brainix/4394158

于 2013-07-04T01:38:56.460 回答
0

你可以这样做:

_gaq?.push ['_code']

这将编译为:

// Generated by CoffeeScript 1.6.2
(function() {
  if (typeof _gaq !== "undefined" && _gaq !== null) {
    _gaq.push(['_code']);
  }

}).call(this);
于 2013-05-02T12:16:11.730 回答