2

だからここに私のコードの流れがあります:

main.js --> jquerymobile --> router --> extra --> lib1 --> lib2

extra.js では、lib2 をロードした後、モジュールをセットアップしました

//extra.js
require( ['lib1'], function () {
        $("#body").append('<p>got lib1</p>');
        require(['lib2'], 
            $("#body").append( '<p>got lib2</p>' );
            window.stuff = true;
            $("#body").append( '<p>set my module</
        });

});

私の router.js では、追加のロードを行った後にモジュールを使用します。

//router.js
require(['../extra'], function() {
        $("#body").append( '<p>using my module</p>' );
        console.log( window.stuff );
    });

モジュールが router.js で使用される前にセットアップされることを期待しています。ただし、これは私が得る順序です:

set my router
using my module
got lib1
got lib2
set my module

もちろん、自分のモジュール (window.stuff) を使おうとすると undefined になります。

このエラーのデモは次のとおりです: https://dl.dropbox.com/u/19311981/demo.zip

依存関係を指定する際に何が間違っていたのかを理解するのを手伝ってもらえますか?

4

1 に答える 1

3

追加の戻り値が返されたときに lib1 と lib2 が確実にロードされるようにする唯一の方法は、define 構文を使用してそれらを依存関係として前もって宣言することです。後で行うことは、他の非同期呼び出しに似ています。いつ戻るかはわかりません。

//extra.js
define(['lib1', 'lib2'], function(lib1, lib2) {
    $("#body").append('<p>got lib1</p>');
    $("#body").append( '<p>got lib2</p>' );
    window.stuff = true;
    $("#body").append( '<p>set my module</
    return something;
});

また、グローバル window.something 変数をモジュールからの通信方法として使用することを再検討することもできます。代わりに、使用できるオブジェクトをモジュールに返させます。

//router.js
require(['../extra'], function(extra) {
    $("#body").append( '<p>using my module</p>' );
    console.log( extra );
});
于 2013-03-28T13:16:38.303 に答える