2012-10-10 19 views
2

從結構上講,控制器不知道有關視圖(通常),它當然不知道其他控制器視圖。控制器也不知道其他控制器。有時這些鬆散耦合的組件需要能夠進行通信,但最佳實踐不是將它們緊密耦合在一起。是否有一個消息框架插件允許不同的組件在應用程序內發送和接收全局消息?有沒有更好的方式來處理這種通信?Ember.js路由器應用程序體系結構 - 如何在鬆散耦合的組件之間正確通信

+0

也許這個問題可以幫助你:http://stackoverflow.com/questions/12799293/ember-js-connectcontrollers#comment17329873_12799293和http://emberjs.com/api/classes/Ember.ControllerMixin.html#method_connectControllers –

+0

@ sly7_7謝謝!這有幫助,它感覺有點駭人聽聞,但它會起作用。我只是討厭強烈的聯結;它感覺不到必須讓他們意識到彼此。 – wmarbut

+0

是的,但現在,我不知道如何做到這一點沒有connectControllers :( –

回答

3

使用類似jQuery.Callbacks創建pub/sub集線器不會太困難。但是,這不是典型的Ember.js應用程序的一部分。

當發生什麼事情需要在負責控制器的範圍之外傳達時,模式是將操作發送到路由器,當前狀態可以處理它。路由器/狀態管理器是應用的協調者,並且可以通過向其他控制器和/或模型發送消息和/或通過轉換到另一狀態來響應該動作。

我想在一個演講中,我最近給了圖本:http://www.lukemelia.com/devblog/archives/2012/08/23/architecting-ember-js-apps/

+0

謝謝盧克:)。在本演示中,您也提到了connectControllers,所以我認爲這是在控制器之間共享數據的好方法。這就是爲什麼我提出這個評論。我錯了嗎? –

+0

@ sly7_7當一個控制器顯示另一個控制器的數據時,connectControllers很棒。但是,wmarbut提出了一個更普遍的問題,即在Ember應用程序中如何使用不同的組件進行通信。 –

+0

Humm一如既往,很好的解釋。再次感謝:)我認爲我必須告訴@tomdale兩個字,他想要這樣的主題文件。我認爲使用connectControllers或者發送到路由器的例子都會是一件好事。 –

1

我還是新的灰燼,但不會Ember Instrumentation在這種情況下是有用的?它允許發佈和訂閱自定義事件。很好的解釋可以在this answer中看到。

+1

我認爲兩者都有效。當@Luke發佈了他的答案時,確信Ember Instrumentation不在 –

相關問題