2

Google Analytics的代碼使用全局_gaq對象作爲分析命令。他們建議,以檢查是否這樣一個對象已經存在,就像這樣:用於谷歌分析的coffeescript中的Javascript範圍代碼

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

在CoffeeScript中,這應該是這樣的:

_gaq = _gaq or [] 

哪個編譯成這樣:

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

如何我可以編寫一個會導致上述Javascript行爲的CoffeeScript代碼嗎?

回答

3

要發佈_gaq變量在全球範圍內你可以在CoffeeScript中這樣寫:

_gaq = window._gaq ?= [] 

JavaScript的輸出:

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

這種方式可以後調用_gaq.push(['_trackPageview']);

在stackoverflow中有another question,談論全球v您可能想要檢查的咖啡文本中的可用內容。

+0

與其他類似,它仍會將var _gaq添加到作用域頂部的變量列表中,拋出已存在的_gaq。 – Lanbo 2013-05-02 12:17:55

+0

http://goo.gl/NA5o3 – 2013-05-02 12:23:07

+0

我的不好,謝謝。 – Lanbo 2013-05-02 12:38:29

0

你可以這樣做:

_gaq?.push ['_code'] 

這將編譯爲:

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

}).call(this); 
+0

但它仍然會在作用域的頂部添加'var _gaq'。 – Lanbo 2013-05-02 12:17:18

+0

@LambdaDusk不,它不是!至少當我將上面的代碼編譯成JavaScript文件時。 – TheHippo 2013-05-02 12:19:15

+0

現場示例:http://tinyurl.com/cbtcpcq – TheHippo 2013-05-02 12:22:18

1

您可以將值有條件地分配給一個變量當且僅當它不存在典雅,像這樣的:

window._gaq ?= [] 

有兩件棘手的事情發生在這裏:

  1. 請注意,我參考window._gaq。 Google Analytics JavaScript直接在window對象上附加_gaq對象。欲瞭解更多信息,請參閱:http://coffeescript.org/#lexical-scope

  2. 觀察運營商?=。這是CoffeeScript的存在操作符,它提供比||=更安全的條件賦值。有關更多信息,請參閱Google for「CoffeeScript存在操作符」。 (我會直接鏈接你,但我不能發佈另一個鏈接,因爲我沒有足夠的信譽分呢。)

最後,我已經把我使用谷歌的要點在CoffeeScript中跟蹤分析:https://gist.github.com/brainix/4394158