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 облегчает предотвращение зомби.

Демо: http://jsfiddle.net/ambiguous/yb9TY/

Другие вопросы по тегам