Javascript 在RequireJS中集中主干事件聚合器-这是如何工作的?
我正在使用RequireJS编写一个主干应用程序来定义模块。我遇到了一个由来已久的问题,即如何在不使用全局变量或将其作为参数传递到每个视图的情况下传递事件聚合器Javascript 在RequireJS中集中主干事件聚合器-这是如何工作的?,javascript,backbone.js,requirejs,eventaggregator,Javascript,Backbone.js,Requirejs,Eventaggregator,我正在使用RequireJS编写一个主干应用程序来定义模块。我遇到了一个由来已久的问题,即如何在不使用全局变量或将其作为参数传递到每个视图的情况下传递事件聚合器 vent = _.extend({}, Backbone.Events); 我已经使用了木偶,但由于我还没有使用木偶,我已经将它改为使用无聊的旧通风对象: vent.js: define(['underscore', 'backbone'], function (_, Backbone) { return _.extend({
vent = _.extend({}, Backbone.Events);
我已经使用了木偶,但由于我还没有使用木偶,我已经将它改为使用无聊的旧通风对象:
vent.js:
define(['underscore', 'backbone'], function (_, Backbone) {
return _.extend({}, Backbone.Events);
});
define(['backbone', 'vent'], function (Backbone, vent) {
var EnquiryListView = Backbone.View.extend({
events: {
'click .enquiry-list-item-manage': 'manageClick'
},
manageClick: function () {
vent.trigger('navigate', 'enquiry/' + id);
}
});
});
define(['backbone', 'vent'], function (Backbone, vent) {
var AppRouter = Backbone.Router.extend({
routes: {
'enquiry/:id': 'enquiryManage'
},
initialize: function () {
//listen out for navigate events
this.listenTo(vent, 'navigate', this.gotoRoute);
},
gotoRoute: function (route) {
this.navigate(route, { trigger: true });
}
});
现在在我的各个模块中,我可以发布和订阅,如:
查询列表视图.js:
define(['underscore', 'backbone'], function (_, Backbone) {
return _.extend({}, Backbone.Events);
});
define(['backbone', 'vent'], function (Backbone, vent) {
var EnquiryListView = Backbone.View.extend({
events: {
'click .enquiry-list-item-manage': 'manageClick'
},
manageClick: function () {
vent.trigger('navigate', 'enquiry/' + id);
}
});
});
define(['backbone', 'vent'], function (Backbone, vent) {
var AppRouter = Backbone.Router.extend({
routes: {
'enquiry/:id': 'enquiryManage'
},
initialize: function () {
//listen out for navigate events
this.listenTo(vent, 'navigate', this.gotoRoute);
},
gotoRoute: function (route) {
this.navigate(route, { trigger: true });
}
});
app router.js:
define(['underscore', 'backbone'], function (_, Backbone) {
return _.extend({}, Backbone.Events);
});
define(['backbone', 'vent'], function (Backbone, vent) {
var EnquiryListView = Backbone.View.extend({
events: {
'click .enquiry-list-item-manage': 'manageClick'
},
manageClick: function () {
vent.trigger('navigate', 'enquiry/' + id);
}
});
});
define(['backbone', 'vent'], function (Backbone, vent) {
var AppRouter = Backbone.Router.extend({
routes: {
'enquiry/:id': 'enquiryManage'
},
initialize: function () {
//listen out for navigate events
this.listenTo(vent, 'navigate', this.gotoRoute);
},
gotoRoute: function (route) {
this.navigate(route, { trigger: true });
}
});
此模式似乎工作正常,路由器可以侦听vent
对象,视图可以在其上触发事件
但是。。。路由器和视图如何查看同一对象?不返回{.extend({},Backbone.Events)每次不同模块需要时,vent.js中的code>总是返回一个新对象吗
关于RequireJS是否有我不了解的东西,或者是.extend
对主干.Events
做了一些事情,或者是关于JavaScript是否有我不完全理解的东西?在AMD中,define回调只执行一个。其结果用于所有相关模块。收银台。我认为你的问题与此相关。太棒了,谢谢你澄清这一点。一百万个脱钩想法刚刚闪现在我眼前。RequiresJS是一件非常好的事情:)