Я недавно начал использовать coffeescript с Rails и обнаружил, что иногда сгенерированный javascript не получает функциональную оболочку безопасности .
Вот пример проекта демонстрируя это.
Например, этот код CS в index.js.coffee:
class Foo
afunc: ->
alert("afunc")
Правильно становится:
(function() {
var Foo;
Foo = (function() {
function Foo() {}
Foo.prototype.afunc = function() {
return alert("afunc");
};
return Foo;
})();
}).call(this);
Но этот код изother.js.coffee:
class App.Func
ouch: ->
alert("ouch")
становится этой неупакованной версией
App.Func = (function() {
function Func() {}
Func.prototype.ouch = function() {
return alert("ouch");
};
return Func;
})();
Кажется, это из-за "приложения".префикс - который я вижу, влияет на наименование / область видимости - но почему coffeescript компилирует его по-другому ...
Приложение определено в файле setup.js.coffee, например:
window.App =
Models: {}
Какойтакже не переносится, если я тоже не добавлю класс в этот файл.
Я уверен, что это мое недоразумение - так что заранее спасибо за ссылки на руководство :).
РЕДАКТИРОВАТЬ: я создал этот вопрос, поскольку я думал, что это может быть связано с некоторыми проблемами, с которыми я столкнулся с моим приложением магистрали / coffeescript, но кажется, что это не так.Так как класс связан с общедоступной / глобальной вещью «App», он, похоже, работает в оболочке или нет.Еще было бы полезно узнать, почему это происходит - это умышленно?