1

requireJS Define モジュール内で変数を設定するのに問題があります。フラットアウトは有効になりません。問題を説明するために、次の(カットダウン)例があります。

定義されたモジュールは次のとおりです。

define([], function () {
var testerString = "BaseLine";

var ShowTesterString = function () {
    console.log(testerString);
}

var setTesterString = function (pTesterString) {
    testerString = pTesterString;
}

return {
    testerString: testerString,
    ShowTesterString: ShowTesterString,
    setTesterString: setTesterString
};  
});

「TesterModule」を別の依存関係として設定し、次のコード行を実行します。

TesterModule.ShowTesterString();
TesterModule.testerString = "Change 1";
TesterModule.ShowTesterString();
TesterModule.setTesterString("Change in Setter");
TesterModule.ShowTesterString();

コンソールに出力されるのは次のとおりです。

BaseLine 
BaseLine 
Change in Setter 

私はそれがあるべきだと思っていたでしょう:

BaseLine 
Change 1
Change in Setter 

variable = blah を実行するだけでモジュールに変数を設定しても効果がないようです。モジュールのメソッド内で変数を設定する必要があるようです。誰かが私にこれがなぜなのか説明できますか? または、私が間違ってコーディングしているものは何ですか?

前もって感謝します

4

1 に答える 1

2

RequireJS にあまり詳しくない私が知る限り、これは純粋な JavaScript の問題です。変化する

console.log(testerString);
// to
console.log(this.testerString);

変更する

testerString = pTesterString;
// to
this.testerString = pTesterString;

var testerString変数を閉じるのではなく、匿名関数によって返されるオブジェクトの値を取得/設定するようにします。返されたオブジェクト キーとは異なる変数名を使用すると、コードで現在何が起こっているかが明確になる場合があります。

define([], function () {
    var foo = "BaseLine";

    var ShowTesterString = function () {
        console.log(foo);
    }

    var setTesterString = function (pTesterString) {
        foo = pTesterString;
    }

    return {
        testerString: foo,
        ShowTesterString: ShowTesterString,
        setTesterString: setTesterString
    };  
});

また、スタイルの問題として、「通常の」関数宣言を使用することをお勧めします。

function ShowTesterString () {
    ...
}

var ShowTesterString = function () { ... }コードのように、を使用するよりも。

于 2012-10-04T02:33:25.357 に答える