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,接受输入并将其转换为modelview 的命令。

通常controller 接收用户输入,例如按键和鼠标点击,并基于此修改model。当model 更改时,view 需要更新以反映更改。

有几个选项可以实现view 更新。

A) view 更新可以通过在修改model 后直接从controller 调用来实现。示例见here。

B) view 更新可以使用Observer 模式实现。在这种情况下,每次model 发生相关更改时,model 都会在view 上触发更新事件。示例见here。

【讨论】:

为什么我们需要第二种方式?我认为是控制器改变了模型,它可以顺便通知视图。 为了简单起见,我删除了第二个选项。感谢@Ivan814 的评论 我想你没有明白我的意思,第二个选项是我在这个问题上关注的。 好的,未编辑答案 :) 所以澄清一下,您是否在寻找 B 的示例? 所以要澄清一下,您是在寻找 B 的示例吗? 是的

以上是关于MVC 中的模型到视图通信?的主要内容,如果未能解决你的问题,请参考以下文章

MVC中视图和模型之间的通信

浅谈js中的MVC

简单谈谈js中的MVC

MVC的秘密

将模型和额外参数从视图传递到 MVC 中的操作

MVC3 模型到数据库视图