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

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

    var IndexView = Backbone.View.extend({

        ...

    });

    return new IndexView;

});


这是另一个文件(我的主干路由器文件)中的以下内容

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


我是否可以使返回的IndexView对象从路由器的作用域内访问而无需在应用程序的名称空间中存储引用?

最佳答案

使用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传递路由器的作用域。

09-28 08:16