0

在此处输入图像描述

现在你已经看到了我很棒的 uml 图,我可以继续做真实的事情了。

假设左侧边栏中的叶子接收到一个动作,这个动作想要改变范围之外的东西谁负责改变主视图?

容器组合、单独的视图管理器、侧边栏组合?

它可能有点模糊和/或主观,但我想知道当它进入更深层次的嵌套时最通用的方法。

4

2 回答 2

1

对此没有一个真正的答案:

一种解决方案是扩展 Backbone 提供的事件模型以创建应用程序级事件聚合器(关于此技术的精彩博客文章在这里)并将事件从复合视图扔到事件聚合器,然后让 MainView 监听事件聚合器适合的事件并相应地改变自身。

另一种解决方案是将您的 compview 的元素绑定到合适的模型和集合,并让您的 compview 的操作修改这些集合和元素,然后通过监听它们发出的事件将您的 MainView 绑定到这些模型和集合。与上面的解决方案有点相似。

另一种解决方案可能是拥有某种控制器对象,该对象具有修改 MainView 的方法,并在需要更改 MainView 时让 compview 调用控制器的方法。

我认为还有许多其他方法可以实现不同视图和元素之间的通信,但这三种方法都很好,至少在某种程度上可以在代码中保持适当的分离水平。当然,您可以将这些混合使用,例如将事件聚合用于应用程序级通信,而将控制器用于单个模块级,但这只是一个想法。

于 2012-06-27T14:11:53.980 回答
0

您可能想查看 knockout.composite - http://danderson00.blogspot.com.au/2012/08/introducing-knockoutcomposite.html

它使用可用于分离这种逻辑的 pubsub 模式。您的 MainView 可以订阅特定消息并执行转换。消息可以直接来自 CompView 或来自中间“控制器”。

于 2012-12-09T01:36:09.607 回答