2

backbone.js アプリケーションにファイルを含める方法について、よく考えました。本番環境では、ファイルを結合して最小化してリクエストを最小限に抑えることは明らかですが、開発中は、すべてのファイルをロードして、小さな変更ごとにビルドスクリプトを呼び出す必要がないようにすることをお勧めします。

だから私はの方法を見てきましjQuerygetScript()。試してみたところ、ファイルをロードできました。

-call を関数に入れたのでgetScript、backbone.js アプリケーションを開始する前にファイルが確実に読み込まれるようにしましたが、読み込まれたすべてのスクリプトがグローバル スコープに含まれていないようです。

var loader = function () {
     var scripts = ['/app/routers/myrouter.js'];

     for (var i = 0; i < scripts.length; i++) {
         $.getScript(scripts[i], function () {});
     }

     console.log(myrouter); // Works - myrouter is a function
     init(); // Callback - we've loaded all scripts
 };

var init = function () {
    console.log(myrouter); // myrouter is undefined
};

$(document).ready(loader());
4

1 に答える 1

6

まず第一にloader()、関数を渡す代わりに呼び出すだけです:

$(document).ready(loader);

それを修正します

次に、initすべてのスクリプトがロードされたときではなく、すぐにコールバックを呼び出しています。多くのスクリプトがある場合は、promise を使用する必要があります。

    var scripts = ['/app/routers/myrouter.js'];
    for (var i = 0; i < scripts.length; i++) {
        scripts[i] = $.getScript(scripts[i]);
    }


    $.when.apply( $, scripts ).then( init, function(){
        "some script failed";
    });

上記で使用されている構文は次のとおりです$.when( promise1, promise2, ...).then( successCallback, failureCallback)。配列にプロミスを入力し、.applyそれらを引数として適用するために使用します。

http://api.jquery.com/jQuery.when/

http://api.jquery.com/Deferred.then/

于 2012-01-21T14:29:44.600 に答える