Боковая коммуникация в полимере

Вот проблема:

Любые два элемента Polymer могут нуждаться в обмене данными. Не делается никаких предположений относительно того, где эти элементы могут находиться в DOM (или теневой DOM), это означает, что одно событие не может просто всплывать к другому элементу.

Старый добрый способ добиться этого — позволить событиям подниматься к корневому узлу, а затем запускать широковещательные события на корневом узле для прослушивания другими элементами.

Однако этот подход нарушает инкапсуляцию и, кажется, идет вразрез с общей конструкцией Polymer. AngularJS, например, предоставляет средство вещания событий, которое не позволяет контроллерам без необходимости сохранять ссылки на корневой узел.

Можно ли добиться такого подхода с Polymer? В противном случае это может быть решено с другим подходом?


person Renaud    schedule 16.06.2014    source источник
comment
ссылка на проблему с Polymer   -  person Renaud    schedule 16.06.2014
comment
Polymer хочет, чтобы вы избегали латеральной связи и чтобы вся коммуникация осуществлялась через контроллер. IOW, иметь явный контейнер, который знает обе цели и управляет их связью. Как архитектура, поначалу это может показаться дополнительной работой, но в конечном итоге обеспечивает гораздо более надежную конструкцию.   -  person Scott Miles    schedule 16.06.2014
comment
@ScottMiles это то, что я имел в виду, извините, если формулировка ввела в заблуждение. Похоже, вы можете использовать элементы в качестве сервисов в Polymer, что даже лучше, чем контроллеры.   -  person Renaud    schedule 17.06.2014


Ответы (1)


Вы должны быть в состоянии сделать это, используя polymer-signals

http://www.polymer-project.org/articles/communication.html#using-ltpolymer-signalsgt

Цитата из документа:

Ваш элемент запускает полимер-сигнал и называет сигнал в своей полезной нагрузке:

this.fire('polymer-signal', {name: "foo", data: "Foo!"});

Это событие всплывает, чтобы документировать, где обработчик создает и отправляет новое событие, полимер-сигнал-foo, всем экземплярам . Части вашего приложения или другие элементы Polymer могут объявить элемент для перехвата именованного сигнала:

<polymer-signals on-polymer-signal-foo="{{fooSignal}}"></polymer-signals>
person robdodson    schedule 16.06.2014
comment
полимерные сигналы были переименованы в основные сигналы - person Renaud; 08.09.2014
comment
Нет, он был переименован в Iron-Signals. - person opengrid; 09.07.2015