0

ページのセクションをロードするために ajax を使用するページがあります。各セクションは、html ファイルと、その HTML のビットだけのイベントを定義する JavaScript ファイルで構成されます。

私がやろうとしているのは、2 つのファイルをバインドしたままにできるファイルの読み込みを管理する方法を考え出すことです。

これは、私が今それを機能させようとしている方法の疑似コードですが、より組織化された方法があるかどうかはわかりません.

擬似コード: (jquery を使用)

  1. ロードする必要がある html/js ファイル ペアのリストを循環します。
  2. ファイルのペアを一意に識別するオブジェクトを配列に追加します。このオブジェクトは、最終的に html および js オブジェクトのコンテナーを保持します。
  3. html の読み込みを開始します。html が返されたら、ページにコンテンツを追加し、配列オブジェクトに id を記録します
    • jquery get コールバックのコンテンツを直接使用するため、これは簡単です。
  4. js の読み込みを開始します。ファイルが読み込まれると、js が実行され、ファイルの戻り値への参照を使用して配列内のオブジェクトが更新されます。
    • ※ここが難しいところです。jQuery.getScript() は、スクリプトが完了すると自動的に実行されるため、既に作成されているため、戻り値を使用できません。私はajax応答を使用できないので、jsファイルに、それ自体を追加するオブジェクトをすでに認識させておく必要があります

そのため、html と js のペア間でデータバインディングを行う js lib が既に利用可能であることを期待していました。

また、オブジェクト マネージャの構成方法もわかりませんでした。js ファイル内の各オブジェクトには、そのセクションに移動したときに呼び出される同じイベントがバインドされます。

申し訳ありませんが、これは一種の負荷の高い質問です。

4

1 に答える 1

0

私のAJAXライブラリが役立つと思います:

http://depressedpress.com/javascript-extensions/dp_ajax/

最も便利な機能の 1 つは、複数の「呼び出し」(個々の HTTP 呼び出し) で単一の「要求」(単一のハンドラーを起動する) を定義する機能です。したがって、スクリプトの呼び出しと HTML の 2 番目の呼び出しの両方を含む単一の要求を定義できます。両方の呼び出しが完了すると、定義されたハンドラーが呼び出され、渡された結果が正しい順序で取得されます。

リクエストの処理に使用されるリクエスト プールは、複数のバックグラウンド オブジェクトを使用してインスタンス化できます (マルチスレッドが可能です)。そのため、リクエストはハンドラーを呼び出す前にすべてのデータを取得しますが、シングル スレッドによって時間を浪費する必要はありません (ただし、行うことはできます)。それもお好みで)。

使用方法の簡単な例を次に示します。

    // The handler function
function AddUp(Nums) { alert(Nums[1] + Nums[2] + Nums[3]) };

    // Create the pool
myPool = DP_AJAX.createPool();

    // Create the request
myRequest = DP_AJAX.createRequest(AddUp);

    // Add the calls to the request
myRequest.addCall("GET", "http://www.mysite.com/Add.htm", [5,10]);
myRequest.addCall("GET", "http://www.mysite.com/Add.htm", [4,6]);
myRequest.addCall("GET", "http://www.mysite.com/Add.htm", [7,13]);

    // Add the request to the pool
myPool.addRequest(myRequest);

「myRequest」はハンドラーを定義します。addCall() メソッドは、複数の呼び出しを追加します。3 つすべてが返されると、結果は 3 つの応答の配列としてハンドラーに送信されます (呼び出しが追加されたのと同じ順序で)。

ファイルをペアで呼び出すことも、すべてを 1 つのリクエストにまとめて呼び出すこともできます。

お役に立てれば!

于 2012-09-20T02:06:34.997 に答える