Переменная не найдена в CoffeeScript - PullRequest
0 голосов
/ 20 января 2012

Я новичок в написании сценариев для кофе. Это мой первый сценарий, и он не работает ..

html
 head title='hello world'
  css:
   h1{
    color: blue;
    }
  coffee:
     number   = 42
     opposite = true
     saybye = () ->
      alert 'hello'+number
      ''        
body
  h1 
   |hello world
  input type="button" onclick="saybye()" value="sayhello"

scss:
 $blue: #3bbfce;

 h2{
  color: $blue;
 } 

Там написано, что пока не найдено, и я должен всегда заканчиваться каким-нибудь выражением, которое будет возвращено. Есть ли способ остановить обратный звонок?

1 Ответ

3 голосов
/ 20 января 2012

Я не знаю, что делает Slim, но CoffeeScript обычно оборачивается функцией, чтобы избежать загрязнения пространства имен.Таким образом, ваш CoffeeScript, вероятно, в конечном итоге будет преобразован в JavaScript примерно так:

(function() {
  var number, opposite, saybye;

  number = 42;

  opposite = true;

  saybye = function() {
    alert('hello' + number);
    return '';
  };
})();

В результате saybye невидим для вашего HTML.

Вы действительно не должны бытьиспользуя onclick в 2012 году, вы должны привязываться к событию через современный API.Если вы используете jQuery, вы бы сделали это следующим образом:

coffee:
  number   = 42
  opposite = true
  saybye = () ->
    alert 'hello'+number
    ''  
  $ -> $('input[type=button]').click saybye

Если вы не используете jQuery (или аналогичный), вы бы сделали это нелегко, используя addEventListener для необработанного объекта DOM.В качестве альтернативы вы можете поместить их в window самостоятельно и обойти защиту области действия:

coffee:
  window.number   = 42
  window.opposite = true
  window.saybye   = () ->
    alert 'hello' + number

Что касается возврата чего-либо, не беспокойтесь об этом, возвращайте то, что имеет смысл.Иногда возвращение undefined имеет смысл, иногда - нет.Если очевидного возвращаемого значения нет, просто позвольте CoffeeScript делать то, что ему нужно, иди с этим:

saybye = () ->
  alert 'hello' + number

и переходи к более интересным проблемам.

...