Я пишу приложение Backbone с использованием RequireJS для определения модулей. Я достиг старой проблемы о том, как обойти агрегатор событий без использования глобалов или передать его как параметр в каждый вид.Централизация агрегатора событий магистрали в RequireJS - как это работает?
vent = _.extend({}, Backbone.Events);
Я взял approach used here для марионеток, но так как я не использую марионетку (пока), я приспособил его использовать скучный vent
объект:
vent.js:
define(['underscore', 'backbone'], function (_, Backbone) {
return _.extend({}, Backbone.Events);
});
Так что теперь в моих различных модулей, я могу публиковать и подписываться, как:
запрос-лист-view.js:
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);
}
});
});
приложение-router.js:
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
объекта и вид может вызвать событие на нем.
Но ... как работает маршрутизатор и смотрят на тот же объект? Не return _.extend({}, Backbone.Events);
в vent.js всегда возвращает новый объект каждый раз, когда требуется другой модуль?
Есть ли что-то о RequireJS, которое я не получаю, или _.extend
что-то делать с Backbone.Events
, или может быть что-то (что-то) о JavaScript, что я не совсем понял?
Удивительный, спасибо за освобождение. На моих глазах мелькнуло миллион развязанных идей. RequiresJS - очень хорошая вещь :) –