-1

ローカル マシンで coffeescript コンパイラを使用して、この coffeescript を javascript にコンパイルすると、次のようになります。

window.App =
  Models: {}
  Views: {}
  Collections: {}
  Routers: {}
  init: ->
      Backbone.history.start()

この生成された JavaScript 出力で終了します。

// Generated by CoffeeScript 1.3.3
(function() {

  window.App = {
    Models: {},
    Views: {},
    Collections: {},
    Routers: {}
  };

  ({
    init: function() {
      var spotsList;
      spotsList = new App.Views.SpotsList();
      return Backbone.history.start();
    }
  });

}).call(this);

しかし、オンラインの coffeescript の同じコードを js http://js2coffee.org/サイトにコンパイルすると、次の結果が得られます。

window.App = {
  Models: {},
  Views: {},
  Collections: {},
  Routers: {},
  init: function() {
    return Backbone.history.start();
  }
};

後者はより期待されているようです。これが私のプロジェクトでいくつかの問題を引き起こしている可能性があると思いますが、わかりません。App.init() を呼び出すと、javascript コンソールに存在しないと表示されます。助けてくれてありがとう!

修繕!

@Rob W が以下で指摘したように、coffeescript コードにいくつかのタブがありました。後で、TextMate をクリーン インストールし、「ソフト タブ (スペース)」に設定していなかったことが原因であることがわかりました。

4

1 に答える 1

2

「ローカル」と「オンライン」の結果には 2 つの違いがあります。

  1. ローカル バージョンはクロージャでラップされています。
  2. ローカル バージョンのinitメソッドが外部にぶら下がっていAppます。

余分なクロージャは、coffeeコンパイラのデフォルトの動作です。フラグを使用して--bare、ラッパーを削除しないようにします。

coffee --bare --compile app.coffee

2が発生する理由はありません。スペースが一致していることを確認してください。Models などの前に 4 つの先行スペースがあり、init の前に 3 つある場合、出力は「間違った」ものになります。

于 2012-10-13T09:00:10.427 に答える