现在您已经看到了我真棒的uml图表,我可以继续使用真实的东西。
让我们说左侧边栏中的一个叶子收到一个动作,这个动作想要改变范围之外的东西谁负责改变主视图?
containercomposite,一个单独的viewmanager,sidebarcomposite?
它可能是一个模糊的和/或主观的,但我想知道在进入更深层次的嵌套时最常用的方法。
答案 0 :(得分:1)
对此没有一个真正的答案:
一种解决方案是扩展Backbone提供的事件模型,以创建应用程序级事件聚合器(关于此技术的一篇很棒的博客文章here),并将事件从复合视图中抛出到事件聚合器,然后让MainView听取事件聚合器以获取合适的事件并相应地更改自身。
另一种解决方案是将compview的元素绑定到合适的模型和集合,并使用compview的操作修改这些集合和元素,然后通过监听它们发出的事件将MainView绑定到这些模型和集合。有点类似于上面的解决方案。
另一种解决方案可能是让某种控制器对象具有修改MainView的方法,并且只要需要更改MainView,就让compview调用控制器的方法。
我认为还有很多其他方法可以实现不同视图和元素之间的通信,但这三种方法都很好,至少在某种程度上可以在代码中保持适当的分离水平。当然,您可以将这些混合使用,例如使用事件聚合进行应用程序级通信,但使用单个模块级别的控制器,但这只是一个想法。
答案 1 :(得分:0)
您可以查看knockout.composite - http://danderson00.blogspot.com.au/2012/08/introducing-knockoutcomposite.html
它使用pubsub模式,可用于分离这种逻辑。您的MainView可以订阅特定消息并执行转换。消息可以直接来自CompView,也可以来自中间“控制器”。