Под Rails3.1.1 / Coffeescript - не всегда получается функция-оболочка безопасности - PullRequest
2 голосов
/ 16 ноября 2011

Я недавно начал использовать 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», он, похоже, работает в оболочке или нет.Еще было бы полезно узнать, почему это происходит - это умышленно?

1 Ответ

1 голос
/ 25 ноября 2011

Функция «Защитная оболочка функции», которую вы используете, работает для предотвращения установки локальных переменных в глобальном пространстве имен.Поскольку установка свойства объекта (App.Func) не влияет на глобальное пространство имен, объявление не заключено в функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...