0

Javascriptに変換する前にCakefileを使用して連結するCoffeeScriptファイルがいくつかあります。連結されたCoffeScriptファイルをJQueryondocument ready関数でラップするにはどうすればよいですか?

例えば:

次のCoffeScriptファイルがあり、それぞれにクラスが含まれています。

foo.coffee bar.coffee tea.coffee

JSファイルを作成するには、次のCakeコマンドを使用してコーヒーを連結し、JSを作成します。

task 'build', 'Build single application file from source files', ->
  appContents = new Array remaining = appFiles.length
  for file, index in appFiles then do (file, index) ->
    fs.readFile "#{file}.coffee", 'utf8', (err, fileContents) ->
      throw err if err
      appContents[index] = fileContents
      process() if --remaining is 0
  process = ->
    fs.writeFile '../assets/js/app.coffee', appContents.join('\n\n'), 'utf8', (err) ->
      throw err if err
      exec 'coffee --compile ../assets/js/app.coffee', (err, stdout, stderr) ->
        throw err if err
        console.log stdout + stderr
        fs.unlink '../assets/js/app.coffee', (err) ->
          throw err if err
          console.log 'Done.'

これにより、次のような素敵なJSファイルが生成されます。

// Generated by CoffeeScript 1.3.3
(function() {

   ...all the code...

}).call(this);

次のようなready関数のJQueryですべてのコードをラップするにはどうすればよいですか?

(function() {

    $(document).ready(function() {
       ...all the code...
    });

}).call(this);

したがって、基本的には、ドキュメントの準備ができた後に実行するすべての連結コードが必要です。

サブ質問これを行う正しい方法を私が求めているのは何ですか?代わりに、各CoffeeScriptファイルに含まれる各クラスをon document ready関数でラップする必要がありますか?

どんな助けでも大歓迎です、私はこれに対する答えを無駄にどのようにそして低く検索しました。

ありがとうございました!

4

2 に答える 2

1

ここでの最初の決定は、あなたが行うコーヒースクリプトの分離パターンを使用するかどうかです。これにより、各coffeescriptファイルのすべてのコードがカプセル化されます。次のように、内部のコードの一部を公開する必要がある場合があります。

foo.coffee

class Foo
  a: 20
  f: () -> 
      console.log("...")

window.Foo = Foo

その後、次のように、公開されたコード部分をすべてのドキュメントで使用できます。

$(document).ready(function() {
   var f = new window.Foo();
});
于 2013-03-18T20:25:45.760 に答える
1

まず最初に、CoffeeScriptコンパイラにはすでにjoinコマンドがあります。

-j, --join [FILE]  

コンパイルする前に、すべてのスクリプトを渡された順序で連結し、指定されたファイルに書き込みます。大規模なプロジェクトの構築に役立ちます。

次に、を使用する代わりに、関数を直接-$(document).ready(function () { ...} )に渡すことができます。$()$(function () { ... });

実際の問題については、いくつかの方法があります。

オプション1:

オプションを使用して.coffeeファイルをコンパイルしてから、開始と終了-b / --bareを含むファイルを手動で連結します(ただし、これはかなり大雑把です)。$(function() {});

オプション2:

次のようなものを使用exports = window ? thisしてグローバルオブジェクトを取得し、jQueryロード関数で実行する機能をそのグローバルオブジェクトに割り当てます。例:

FooModule = do ->
  class Foo 
    constructor: (@blah) ->

  init = ->
    blah = new Foo('bar')

  init: init

exports = window ? this
exports.Foo = FooModule

次に、次のようなものを含む別のファイルを作成できます。

$(->
  Foo.init()
)

それらのオプションの1つが良いことを願っていますか?

于 2013-03-19T04:21:59.970 に答える