MVC 中的模型到视图通信?
Posted
技术标签:
【中文标题】MVC 中的模型到视图通信?【英文标题】:The Model-to-View communication in MVC? 【发布时间】:2015-11-24 01:40:50 【问题描述】:我现在正在学习MVC,我刚刚知道当控制器修改模型时,它可以通知视图更新模型中的数据。虽然我对此很困惑。由于模型是由控制器而不是它自己或其他东西修改的,所以应该是控制器向视图发送更新通知。我也没有找到任何模型到视图通信的例子,如果有人理解这个想法,请给我一个说明。
【问题讨论】:
【参考方案1】:模型到视图的通信通常通过观察者模式完成。视图中的代码往往比模型中的代码变化更多,因此模型-视图分离意味着模型元素不直接依赖于视图元素。您可以添加或更改视图代码,模型代码不受影响。
状态改变的模型元素只会通知它的所有观察者。状态变化可能是由于控制器或其他原因(值随时间变化)而发生的。
请参阅https://msdn.microsoft.com/en-us/library/ff649643.aspx,尤其是以下内容:
(来源:s-msft.com)
【讨论】:
【参考方案2】:MVC 的核心组件model
根据问题域捕获应用程序的行为,与用户界面无关。 model
直接管理应用程序的数据、逻辑和规则。 view
可以是信息的任何输出表示,例如图表或图表。
第三部分,controller
,接受输入并将其转换为model
或view
的命令。
通常controller
接收用户输入,例如按键和鼠标点击,并基于此修改model
。当model
更改时,view
需要更新以反映更改。
有几个选项可以实现view
更新。
A) view
更新可以通过在修改model
后直接从controller
调用来实现。示例见here。
B) view
更新可以使用Observer 模式实现。在这种情况下,每次model
发生相关更改时,model
都会在view
上触发更新事件。示例见here。
【讨论】:
为什么我们需要第二种方式?我认为是控制器改变了模型,它可以顺便通知视图。 为了简单起见,我删除了第二个选项。感谢@Ivan814 的评论 我想你没有明白我的意思,第二个选项是我在这个问题上关注的。 好的,未编辑答案 :) 所以澄清一下,您是否在寻找 B 的示例? 所以要澄清一下,您是在寻找 B 的示例吗? 是的以上是关于MVC 中的模型到视图通信?的主要内容,如果未能解决你的问题,请参考以下文章