0

プラグインの Flash 要素がrequire.jsクロージャーで動作しないため、マスター ブランチでの小さなハックを提案する小さな jquery プラグインについて、GitHub で今日プル リクエストを受け取りました。最終的には Flash がグローバル変数を必要とするため、require.js を介してロードした後にスコープが変更され、変数が表示されなくなります。

プル リクエストで提案されている修正は、宣言を省略することなので、基本的には次のようになります。

foo = { "bar": 1 };

それ以外の:

var foo = { "bar": 1 };

しかし、それはjslintの通過を永久に禁止するので、私は本当にそれをしたくありません.

メインスクリプトでこれを次のように修正する必要があります:

var foo = { "bar": 1 };
if ( typeof(window) === 'object' ) { window['foo'] = foo; }

または、スクリプトではなく実装でこれを修正することをお勧めしますか?

4

3 に答える 3

1

Flash のグローバル変数が必要な場合は、アプリケーションに適切な名前空間を作成して、Flash が単一のエントリ ポイントからアクセスできるようにすることをお勧めします。

// create your objects for your app
var foo = {
    bar: 1
};

// add your object to the global namespace  eg. 'myApp'
window.myApp = foo;

この記事が役立つかもしれません: http://www.2ality.com/2011/04/modules-and-namespaces-in-javascript.html

于 2013-03-12T22:38:46.037 に答える
1

サードパーティは変数を直接制御する必要がありますか? 最後に行を追加できますwindow.foo = foo

getFoo()ただし、変数を制御できるように、値を返すメソッドを使用する方が安全です。

于 2013-03-12T22:39:30.763 に答える
1

ライブラリの消費者がどこに貼り付けるかを選択できるようにする初期化パラメータを提供できます。

require(['theflashlibrary'], function(theFlashLibrary){

    theFlashLibrary.init({ globalProperty: 'foo' }); //Otherwise this could default to something else...
});

これを行う良い方法はありませんが、ライブラリを参照する場所をユーザーが選択できる方法を少なくとも提供できればよいと思います。

于 2013-03-12T22:45:21.690 に答える