0

同じフォルダーに A と B の 2 つの coffeescript ファイルがあります。A をある時点まで実行してから、B を実行してから、実行を継続します。言い換えれば、私はこれが欲しい:

//in A
$("#content").html(@currentView.el)
require ['B']

//in B
if document.location.href.indexOf("showdiv") > 0
    $("#content").trigger('click')

ただし、すべてを A に入れると、正常に動作します。

//in A
$("#content").html(@currentView.el)

if document.location.href.indexOf("showdiv") > 0
    $("#content").trigger('click')

最初のスニペットを機能させるにはどうすればよいですか? コンパイルされたjavascriptを並行してロードするrequireキーワードはありますか?

4

1 に答える 1

0

ブラウザーでは、HTML ファイルにコードを取り込む方法によってロード順序を制御します。これは私のプロジェクトの 1 つからの例です (の終了タグindex.htmlの直前):body

  <script src="vendor/jquery-1.7.2.min.js"></script>
  <script src="vendor/bs/js/bootstrap.min.js"></script>
  <script src="vendor/underscore-min.js"></script>
  <script src="vendor/backbone-min.js"></script>
  <script src="vendor/pouch.alpha.js"></script>
  <script src="vendor/backbone-pouchdb.js"></script>
  <script src="vendor/backbone-couchdb.js"></script>

  <script src="js/main.js"></script>

最後の関数は、C の「メイン」関数と同様に、物事を開始する関数です。その中には、この構造があります(もちろんjsにコンパイルされています):

$(document).ready ->
  # Initialization code goes here

初期化コードには、元の投稿のすべてのコード (ブラウザーに存在しない require 呼び出しを除く) を含めるか、それを含む関数を呼び出します。上記の方法でスクリプトの実行を遅らせる必要がある理由は、すべてのコードが適切にロードされるまで実行を遅らせるためです。

それを行うには他にも方法があり、混同する可能性があるのは Javascript AMD (Asynchronous Module Definition) の概念であり、そのライブラリの 1 つで詳細を読むことができます (RequireJS - http://requirejs.org)。しかし、私のアドバイスは、AMD を (ツールを使用して) 動かそうとする前に、上で説明したように基本をマスターすることです。

于 2012-07-31T21:05:41.440 に答える