2014-01-27 3 views
2

Я пишу приложение 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, что я не совсем понял?

ответ

5

В AMD определение обратного вызова выполняет только те. Его результат используется во всех зависимых модулях. Оформить оплату this. Я думаю, ваш вопрос связан с этим.

+0

Удивительный, спасибо за освобождение. На моих глазах мелькнуло миллион развязанных идей. RequiresJS - очень хорошая вещь :) –

Смежные вопросы