現在你已經看到了我的真棒uml圖我可以繼續與真正的東西。
假設左邊欄中的一個頁面接收到一個動作,這個動作想要改變負責改變mainview的範圍之外的東西嗎?
該containercomposite,一個獨立的viewmanager,sidebarcomposite?
它可能是一個精簡的模糊和/或主觀的,但我想知道當它進入更深層次的嵌套時最通用的方法。
現在你已經看到了我的真棒uml圖我可以繼續與真正的東西。
假設左邊欄中的一個頁面接收到一個動作,這個動作想要改變負責改變mainview的範圍之外的東西嗎?
該containercomposite,一個獨立的viewmanager,sidebarcomposite?
它可能是一個精簡的模糊和/或主觀的,但我想知道當它進入更深層次的嵌套時最通用的方法。
沒有一個真正的答案是:
一種解決方案是延長由骨幹提供的事件模型來創建一個應用程序級別的事件聚合器(一個偉大的博客文章關於這項技術的here)和折騰事件從複合視圖到事件聚合器,然後讓MainView監聽適合事件的事件聚合器並相應地改變自己。
另一種解決方案是將您的compview元素綁定到合適的模型和集合,並通過compview的操作修改這些集合和元素,然後讓您的MainView通過監聽它們發出的事件綁定到這些模型和集合。有點類似於上面的解決方案。
另一種解決方案可能是擁有某種控制器對象,該控制器對象具有修改MainView的方法,並且每當需要更改MainView時,都會通過compview調用控制器的方法。
我認爲還有很多其他的方法可以實現不同視圖和元素之間的通信,但是這三者都很好,至少在某種程度上可以在代碼中保持適當的分離級別。當然,你可以將這些混合使用,如使用事件聚合進行應用程序級通信,但控制器用於單個模塊級別,但這只是一個想法。
你可能想看看knockout.composite - http://danderson00.blogspot.com.au/2012/08/introducing-knockoutcomposite.html
它使用的是可用於這種邏輯分離發佈訂閱模式。您的MainView可以訂閱特定的消息並執行轉換。該消息可以直接來自CompView或來自中間「控制器」。