Области применения Javascript в coffeescript для кода Google Analytics
Коды для Google Analytics используют глобальный _gaq
объект для команд аналитики. Они советуют проверить, существует ли такой объект, вот так:
var _gaq = _gaq || [];
// Command
_gaq.push(['_trackPageview']);
В CoffeeScript это будет выглядеть так:
_gaq = _gaq or []
Что компилируется в это:
(function() {
var _gaq;
_gaq = _gaq || [];
}).call(this);
Как я могу написать код CoffeeScript, который приведет к поведению вышеупомянутого Javascript?
3 ответа
Чтобы сделать _gaq
переменная доступна в глобальной области видимости, вы можете написать это в coffeescript:
_gaq = window._gaq ?= []
Вывод JavaScript:
var _gaq, _ref;
_gaq = (_ref = window._gaq) != null ? _ref : window._gaq = [];
Таким образом, вы можете позже позвонить _gaq.push(['_trackPageview']);
Есть еще один вопрос в stackru, в котором говорится о глобальных переменных в coffeescript, которые вы, возможно, захотите проверить.
Вы можете условно присвоить значение переменной, если оно не существует элегантно, как это:
window._gaq ?= []
Здесь происходят две хитрые вещи:
Обратите внимание, что я ссылаюсь
window._gaq
, JavaScript Google Analytics придает_gaq
объект прямо наwindow
объект. Для получения дополнительной информации см.: http://coffeescript.org/Соблюдайте
?=
оператор. Это экзистенциальный оператор CoffeeScript, который обеспечивает более безопасное условное присвоение, чем||=
, Для получения дополнительной информации, Google для "экзистенциальный оператор CoffeeScript". (Я бы связал вас напрямую, но я не могу опубликовать другую ссылку, потому что у меня пока недостаточно очков репутации.)
Наконец, я собрал суть, которую я использую для отслеживания Google Analytics в CoffeeScript здесь: https://gist.github.com/brainix/4394158
Вы могли бы сделать:
_gaq?.push ['_code']
Который будет компилироваться в:
// Generated by CoffeeScript 1.6.2
(function() {
if (typeof _gaq !== "undefined" && _gaq !== null) {
_gaq.push(['_code']);
}
}).call(this);