Вызов функций coffeescript из консоли - PullRequest
16 голосов
/ 20 июля 2011

Немного поигрался с coffeescript и Rails 3.1.0.rc4.Иметь этот код:

yourMom = (location) ->
  console.log location

yourMom "wuz hur"

Когда страница загружается, это правильно выводит "wuz hur".Но когда я пытаюсь вызвать

yourMom("wuz hur")

из консоли chrome js (как я иногда проверяю обычные функции JS), я получаю «ReferenceError: yourMom не определен»функции, сгенерированные coffeescript доступны таким образом?

Ответы [ 4 ]

37 голосов
/ 13 сентября 2011

Более простой способ поделиться глобальными методами / переменными - использовать @, что означает следующее.

@yourMom = (location) ->
  console.log location

yourMom "wuz hur"

Более приятный синтаксис и его легче читать, но я не призываю вас создавать глобальные методы / переменные

13 голосов
/ 20 июля 2011

Это происходит потому, что coffeescript упаковывает все в замыкание.Вывод JavaScript этого кода на самом деле:

(function() {
  var yourMom;
  yourMom = function(location) {
    return console.log(location);
  };
  yourMom("wuz hur");
}).call(this);

Если вы хотите экспортировать его в глобальную область, вы можете сделать следующее:

window.yourMom = yourMom = (location) ->
  console.log location

или

this.yourMom = yourMom = (location) ->
  console.log location
2 голосов
/ 20 июля 2011

Я не уверен насчет Rails, но у компилятора CoffeeScript есть опция (--bare) для компиляции без оболочки функций.Хорошо для игры, но это загрязняет глобальный охват.

0 голосов
/ 03 октября 2012

эта ссылка может решить вашу проблему Rails - вызов CoffeeScript из JavaScript Оберните ваши функции в уникальном пространстве имен, и тогда вы сможете получить доступ к этим функциям из wnywhere

...