2013-01-03 84 views
2

我正在編寫一個Ember應用程序,它由一些複雜的有狀態組件組成。由於它不是傳統的CRUD應用程序,因此我無法圍繞Ember如何處理這類應用程序進行包裝。具有Ember路由器的多個有狀態組件

這是一個高度交互式的單頁面應用程序。一些示例組件 XMPP文字聊天, 多方音頻, XMPP共享白板,以及 流行起來通知

有一個全球性的狀態(我可以看到通過路由器處理),設置用戶環境(誰我正在使用音頻/白板)。我不太明白的是,如果路由器在設置與音頻和白板無關但仍具有狀態的聊天上下文時發揮什麼作用。我無法瞭解路由器的URL字符串如何同時反映所有這些組件的狀態。

這是我完全跳過路由器的情況嗎?如果是這樣,我怎麼能鏈接我的應用程序的意見/控制器?到目前爲止,我一直在使用路由器的connectOutlets方法來鏈接我的視圖和控制器。如果不調用這個方法,那麼另一種(結構化和有組織的)方式來做這個綁定呢?

謝謝

+0

FYI有一個新的[路由器API(http://emberjs.com/guides/routing /),最近已將其添加到Ember中,並且已在Ember指南中進行了更新。 – CraigTeegarden

回答

2

好問題!

  • 全局狀態:使用路由器
  • 應用程序狀態:在控制器單身您的應用程序組件

作爲一般規則相關,我建議使用路由器來管理國家,一個用戶可以書籤或使用瀏覽器前進/後退按鈕進行交互。只是猜測,但爲您的應用程序,可能包括白板的ID。

聊天,音頻和通知等組件通常會存在並保持獨立於路由器的狀態。在某些情況下,這些組件的行爲可能會有所不同(具體取決於顯示哪個白板),但聊天窗口小部件的狀態本身將作爲屬性存儲在ChatController單例中。

餘燼導板尚未完成,但你會發現控制器指南的最後一節「存儲應用程序屬性」樂於助人http://emberjs.com/guides/controllers/

+0

謝謝,清除了很多。 – weichsem

相關問題