這裏是問題:聚合物中的橫向通信
任何兩個聚合物元素可能需要溝通。對這些元素可能在DOM(或影子DOM)中的位置不作任何假設,這意味着一個事件不能簡單地冒泡到另一個元素。
實現這一目標的好方法是讓事件冒泡到根節點,然後在根節點上激發事件以便其他元素偵聽。
然而,這種方法打破封裝,似乎違背聚合物的整體設計。例如AngularJS提供了一個事件廣播器,使控制器免於不必要地保留對根節點的引用。
聚合物可以實現這樣的方法嗎?否則這可以用不同的方法解決?
這裏是問題:聚合物中的橫向通信
任何兩個聚合物元素可能需要溝通。對這些元素可能在DOM(或影子DOM)中的位置不作任何假設,這意味着一個事件不能簡單地冒泡到另一個元素。
實現這一目標的好方法是讓事件冒泡到根節點,然後在根節點上激發事件以便其他元素偵聽。
然而,這種方法打破封裝,似乎違背聚合物的整體設計。例如AngularJS提供了一個事件廣播器,使控制器免於不必要地保留對根節點的引用。
聚合物可以實現這樣的方法嗎?否則這可以用不同的方法解決?
你應該能夠做到這一點使用polymer-signals
http://www.polymer-project.org/articles/communication.html#using-ltpolymer-signalsgt
從文檔報價:
你的元素火災聚合物信號和名稱在其有效載荷信號:
this.fire('polymer-signal', {name: "foo", data: "Foo!"});
這個事件冒泡到文檔中,處理程序構造併發送一個新事件,聚合信號 - foo到所有實例。你的應用程序或其他聚合物元件的部件可以聲明一個元件趕上命名信號:
<polymer-signals on-polymer-signal-foo="{{fooSignal}}"></polymer-signals>
連結聚合物[問題](https://github.com/Polymer/polymer/issues/145) – Renaud
聚合物希望你避免進行橫向交流,並且擁有由控制器介導的所有溝通。 IOW,有一個明確的容器,既知道目標又管理他們的交流。作爲一種體系結構,起初它可能感覺像是額外的工作,但最終提供了更加強大的設計。 –
@ScottMiles這就是我所暗示的,對不起,如果措辭是誤導..看起來你可以使用元素作爲聚合物的服務,它甚至比控制器更好。 – Renaud