0

jQuery の AJAX 関数以外に、「非同期」 JavaScript についての理解は非常に限られています。

物事を整然と軽量に保つために、外部の Javascript ファイルを「モジュール」としてロードするシステムを作成しました。これを行うための主なインスピレーションと実装は、ここにあります。

したがって、たとえば、 と呼ばれる JS ファイルにはfoo.js、属性が設定された次の JS オブジェクトが含まれる場合があります。

var bar = { 
   a:1,
   b:2
}

この外部ファイルがロードされると、それ以降はアクセス可能にwindow.barなります。そのため、ブラウザーの Developer Tool JS コンソールにwindow.bar.a(または)と入力すると、次のように返されます。bar.a

1

オブジェクトを変数に割り当てようとすると問題が発生しbarます。これは、多くの場合、外部 JS モジュールがロードされ、通常はundefined-boo!が含まれる前に同期的に解決されます。

これはこれまでの私の試みです: 基本的に、オブジェクト インスタンスが に既に存在する場合はそれを返しますwindow。それ以外の場合は、読み込まれるのを待ってから返します (理想的には)。

var val = getInstance('bar');

私の関数を呼び出す:

function getInstance(name) {
    if(typeof window[name] === 'object'){
        return window[name];
    } else { 
        $(window).on('load', window[name], function() { 
            return window[name];
        });
    }
}

undefinedもちろん、これはI のときに返されますconsole.log(val)

barここで、オブジェクトが非同期で に到達することを期待していることを知っていますval。次に、 (つまり)barを介してインスタンスの参照を開始できます。valval.a == 1

jQuery の Deferred Object ( $.Deferred) に目を通すように努力しましたが、私の理解は失われていますが、締め切りが迫っているので、数日後ではなく今すぐ知りたいのです。の取得とインスタンスのbar追跡val

ヘルプ、ポインタ、またはコメントは大歓迎です!

4

3 に答える 3

1

ケビン B さんが正しい答えをくれたと思います。

タイムラインとこのトピックに慣れていないことを考慮して、非同期モジュールを実行する代わりに、JavaScript ファイルを連結して縮小することをお勧めします。

それ以外の場合は、require や yepnope などのモジュール ローダーの使用方法を理解するために時間を費やす必要があります。あなたが参照している記事では、複数のモジュールを同時にロードすることは扱っていません。非同期スクリプトの読み込みを行うには、コードの実行順序を整理するためにコールバックを活用する必要があります。

于 2013-06-27T17:21:56.490 に答える