Какого черта Rails 3.1 / Sprockets 2 / CoffeeScript добавляет дополнительный код? - PullRequest
4 голосов
/ 05 августа 2011

Работа с Rails 3.1 (rc5), и я замечаю, что любой файл coffeescript, в который я включаю rails (или звездочки), добавляется при инициализации javascript вверху и внизу. Другими словами, пустой файл .js.coffee выводится в следующем виде:

(function() {
}).call(this);

Это раздражает, потому что портит мою область видимости JavaScript (если я действительно не знаю, что я делаю). Я обычно разделяю все свои классы javascript на отдельные файлы, и я считаю, что использование этого функционального кода, обертывающего мои классы, просто выводит их из области видимости друг от друга. Или, по крайней мере, я не могу получить к ним доступ, так как постоянно получаю неопределенные ошибки.

Есть ли способ переопределить это? Кажется, что этот файл в звездочках связан с добавлением этого кода: https://github.com/sstephenson/sprockets/blob/master/lib/sprockets/jst_processor.rb

Я понимаю, что завершение всего в функции может показаться дополнительным удобством, так как тогда ничего не запускается, пока DOM не загружен, но, насколько я могу судить, это только портит мою сферу.

Ответы [ 2 ]

10 голосов
/ 05 августа 2011

Планируете ли вы поместить ваши объекты в глобальную сферу?Я думаю, что CoffeeScript обычно оборачивает код в анонимные функции, чтобы он случайно не попал в глобальную область видимости переменных.Если нет способа его отключить, вероятно, лучше всего было бы специально добавить в объект окна все, что вы хотите видеть в глобальной области видимости:

window.myGlobal = myGlobal;

Похоже, что это лучшая практика javascriptв наши дни, чтобы поместить код в область действия функции и четко указать добавление объектов в глобальную область, я обычно вижу, что CoffeeScript выполняет автоматически.

2 голосов
/ 06 августа 2011

Вы не хотите помещать все в глобальную сферу. Вам нужен модуль или модуль, подобный системе, в которой вы можете создавать пространства имен, чтобы не сталкиваться с другими библиотеками. Прочитайте

https://github.com/jashkenas/coffee-script/wiki/Easy-modules-with-coffeescript

...