0

これについてはいろいろ調べてみましたが、情報が見つかりません。sinatra 内でアプリケーションを構築し、coffeescript テンプレート エンジンを使用しています。デフォルトでは、コンパイルされたコードは次のようにラップされます。

(function() {
  // code
}).call(this);

--bare フラグを使用してそれを削除したいので、別のファイルが私が定義しているクラスなどにアクセスできるようにします。変数の衝突などを防ぐのに役立つことはわかっていますが、ここでは 2 つの主要な部分に取り組んでいます。1 つはビジネス ロジック、およびクラス構造内のデータの配置です。もう1つは、raphaeljsを使用したビュー機能です。これら 2 つの部分を別々のファイルに保存することをお勧めします。このようにラップされた 2 つのファイルはデータにアクセスできないため、明らかに機能しません。ただし、 --bare オプションを使用するよりも優れた解決策を思いつくことができれば、私はすべて耳にします。

4

2 に答える 2

2

ベアコンパイルは単に悪い習慣です。各ファイルは、アプリの残りの部分にとって重要なパブリック オブジェクトのみをグローバル スコープにエクスポートする必要があります。

# foo.coffee
class Foo
  constructor: (@abc) ->

privateVar = 123

window.Foo = Foo # export

Fooがグローバルに利用できるようになりました。そのパターンが実用的でない場合は、構造を少し再考する必要があるかもしれません。あまりにも多くのものをエクスポートする必要がある場合は、ネストして名前空間を改善し、より少ないグローバル変数でより多くのデータを公開できるようにします。

于 2012-04-13T21:10:28.293 に答える
1

私はAlexの答えを支持しますが、どうしてもこれを行わなければならない場合は、Rails3.1の同じ質問に対する私の答えがここにも当てはまると思います。

Tilt::CoffeeScriptTemplate.default_bare = true

アプリケーションのどこかに。

于 2012-04-14T01:55:00.077 に答える