我有一个问题让我很困惑,因为我最初认为我理解了 RequireJS 的“垫片”配置部分。使用下面的代码,我定义了一个名为“app”的条目,它也恰好是根中另一个脚本/对象的名称:
requirejs.config({
baseUrl: 'scripts',
shim: {
'vendor/jquery-2.0.3.min': {
exports: '$'
},
'vendor/underscore-min': {
exports: '_'
},
'vendor/backbone': {
deps: ['vendor/underscore-min'],
exports: 'Backbone'
},
'library/marionette/backbone.marionette': {
deps: ['vendor/backbone'],
exports: 'Marionette'
},
'library/backbone.stickit' : {
deps: ['vendor/backbone']
},
'library/backbone.subroute' : {
deps: ['vendor/backbone'],
exports: 'Backbone.SubRoute'
},
'app': {
deps: [
'vendor/jquery-2.0.3.min',
'vendor/underscore-min',
'vendor/backbone',
'library/backbone.stickit',
'library/backbone.subroute',
'library/marionette/backbone.marionette'
]
}
}
});
如果我在之后立即定义一个方法:
require(['app'], function (app) {
app.expose('vent', _.extend({}, Backbone.Events));
app.initialize(function () {
this.vent.trigger('initialized');
});
});
我可以使用 Backbone 而无需显式引入它。这是为什么呢?是因为我在同一个文件之后立即“需要(['app']”吗?
我造成的这个混乱的另一个方面是我带来的任何其他资源:
require(['app', 'routers/main'], function (app, MainRouter) {
app.expose('vent', _.extend({}, Backbone.Events));
app.initialize(function () {
new MainRouter();
this.vent.trigger('initialized');
});
});
抱怨主干“未定义”。所以我可以从我定义应用程序的地方神奇地使用它,但除此之外它不是。我觉得我在这里从根本上误解了一些东西-请有人让我直截了当吗?