Backbone. Отправка / прослушивание событий между представлениями
Я немного озадачен тем, как обрабатывать события между представлениями в Backbone. Прямо сейчас у меня есть два частичных представления, представленных одновременно на веб-сайте. Теперь я хочу, чтобы одно из представлений отправило событие, которое может прослушать другое представление. Как бы я это сделал?
В представлении, которое отправляет событие, которое я запускаю:
this.trigger("myEvent")
И во время прослушивания я бегу:
this.bind('myEvent', this.myFunc);
Но, похоже, ничего не происходит вообще.
1 ответ
Если вы запускаете событие на v1
с:
this.trigger('myEvent'); // this is v1
тогда вам придется слушать события из v1
с:
v1.on('myEvent', this.myFunc); // this is, say, v2 here.
События не являются глобальными, они происходят от определенных объектов, и вы должны слушать эти конкретные объекты, если хотите получать их события.
Если вы свяжете представления непосредственно друг с другом, вы быстро получите запутанный беспорядок, где все непосредственно связано со всем остальным. Обычное решение - создать собственную шину событий:
// Put this where ever it makes sense for your application, possibly
// a global, possible something your your app's global namespace, ...
var event_bus = _({}).extend(Backbone.Events);
затем v1
будет отправлять события через event_bus
:
event_bus.trigger('myEvent');
а также v2
будет слушать event_bus
:
this.listenTo(event_bus, 'myEvent', this.myFunc);
Я также перешел с bind
в listenTo
поскольку listenTo
облегчает предотвращение зомби.