7

2 つのスクリプト間でデータを適切に通信するにはどうすればよいですか。

この特定のケースでは、あるスクリプトに要素がありますが、それを別のスクリプトに追加したいと考えています。

これを行う最も簡単な方法は、グローバル ウィンドウ オブジェクトを仲介者として使用することです。

しかし、グローバルはベスト プラクティスではありません。

この要素を別のスクリプトに渡す正しい方法は何ですか?

どちらのスクリプトもモジュール パターンにカプセル化されています。

スクリプト 0 要素ポイントの作成

var element = document.createElement( "div" );
element.innerHTML = response_text;

スクリプト 1 追加要素ポイント

Vi.sta = {

    // implemented in the boot loader - shared global space - appended child already - you don't have to append until now.
    // Static data has already been composed. 
    // Pull off window and append or best practice

};

どちらもモジュールパターンにカプセル化されています

(function(){ 
    // the code here 
})()
4

3 に答える 3

6

すべての JS スクリプトはグローバル スコープで実行されます。ファイルがクライアントにダウンロードされると、グローバル スコープで解析されます。

だからあなたが持っているなら

// File_1.js
var myObj = { colour : "blue" };

これを行うことを妨げるものは何もありません:

// File_2.js
var otherObj = { colour : myObj.colour };

File_1.js が File_2.js の前にロードされる限り

名前空間を使用している場合、つまりMYNAMESPACE = {};、各ファイルがモジュールを介して名前空間を拡張している場合 (「モジュール パターン」は、すぐに呼び出す関数からインターフェイスを返すことを参照するのではなく)、モジュールの存在を確認します。

名前空間アプリ用のモジュールを作成していて、あるモジュールから別のモジュールへの変数へのアクセスが必要な場合は、interfaceそのための を提供する必要があります。

SANDBOXINGモジュールの場合は、またはにproxy似たものをすべて提供するか、 に基づいて を開発する必要があります。service-locator"registry"messaging-systemmediator-pattern

于 2012-08-23T17:54:43.087 に答える
5
window.sharedSpace = {};
sharedSpace.sharedValue = 'foo bar';

そうすれば、複数ではなく 1 つのグローバル オブジェクトのみを持つことができます。

于 2012-08-23T17:53:31.770 に答える
1

モジュール内の関数に要素を渡すだけではどうですか?

var module1 = (function () {
    return {
        func1: function () {
            // get your element
            var someElement = ...;

            // pass it to the other module
            module2.func2(someElement);
        }
    };
}) ();

var module2 = (function () {
    return {
        func2: function (someElement) {
            // do whatever you want with someElement
        }
    };
}) ();
于 2012-08-23T17:59:40.017 に答える