0

次のようなモジュールが 1 つのファイルで定義されています

define(['mod1', 'mod2'], function (mod1, mod2) {

    var IndexView = Backbone.View.extend({

        ...

    });

    return new IndexView;

});

そして、これは別のファイル(私のバックボーンルーターファイル)内から次のように要求されます

require(['src/views/index']);

IndexViewアプリの名前空間に参照を保存せずに、ルーターのスコープ内から返されたオブジェクトにアクセスできるようにすることはできますか?

4

1 に答える 1

3

require.js を使用してバックボーン ビュー/モデルのインスタンスを渡すと、すぐに人生が非常に不幸になります。モジュールがビュー/モデルの定義のみを返すようにする方がはるかに簡単です。そうすれば、それらすべてを同じスコープ内でインスタンス化できます。

したがって、ビュー モジュールが定義だけを返すようにすると、次のようになります。

// IndexView module
define(['dep1', 'dep2'], function (dep1, dep2) {

    var IndexView = Backbone.View.extend({

        ...

    });

    return IndexView;

});

次に、ルーター内でインスタンス化できます。

// our main requirejs function
requirejs(['path/to/indexview'], function (IndexView) {

    var AppRouter = Backbone.Router.extend({

        initialize: function () {

            // bind our IndexView to the router
            this.IndexView = new IndexView();

        }

    });

    // start the app
    var app = new AppRouter();

});

そうすれば、コードは依然として Require.js でモジュール化されますが、 を使用してルーターのスコープを渡すことができますthis

于 2012-11-12T15:52:41.457 に答える