4

私はバックボーンアプリケーションに取り組んでいます。

モデル + コレクション + ビューを別のファイルに構造化しました。

function() { // all my code }() つまり、ここでは適用されないようなソリューション

名前空間を追加しました App.ModelName App.Views.ViewName etc.

同じ名前空間にいるとき。繰り返さないようにするにはどうすればよいでしょうか。つまり、App.Views.ViewName で定義された関数にいるときに ModelName を呼び出すにはどうすればよいですか

現時点では、完全な文字列、つまり App.XXXX を繰り返し続けています

ありがとう

4

3 に答える 3

5

いくつかの選択肢があります:

1) 各関数でローカル変数を作成します。

App.ModelName.myFunction = function() {
    var model = App.ModelName;
    // then you can reference just model
    model.myFunction2();
}

2) 各ファイル スコープにローカル変数を作成します。

(function() {
    var model = App.ModelName;

    model.myFunction = function() {
        // then you can reference just model
        model.myFunction2();
    }


    // other functions here

})();

3) の値を使用しますthis

App.ModelName.myFunction = function() {
    // call App.ModelName.myFunction2() if myFunction() was called normally
    this.myFunction2();   
}
于 2012-07-11T05:15:35.350 に答える
2

名前空間は、グローバル スコープ内の単なるオブジェクトです。

withそのため、いくつかの欠点がありますが、1つの代替手段を使用することです。

とにかく、このサンプルをチェックしてください:

window.test = {
    a: function(){ console.log(this); return 'x'; },
    b: function(){ with (this){ alert(a()); }}        // <- specifying (this)
};

window.test.b();
于 2012-07-11T05:14:02.027 に答える
1

それらを引数として渡すのはどうですか?このようなもの:

(function(aM,aV) {
    // use aM and aV internally
})(App.Models,App.Views);
于 2012-07-11T05:37:38.593 に答える