0

我在一个文件中定义了如下模块

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 传递 Backbone 视图/模型的实例将很快让您的生活变得非常不愉快。让你的模块只返回视图/模型的定义会容易得多,这样就可以在同一个范围内实例化它们。

所以如果你让你的视图模块只返回定义:

// 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 回答