是视图中的事件处理程序或 MVC 应用程序中的控制器
Are event handlers in the view or the controller in an MVC application?
我目前正在注册一门关于JavaScript设计模式的课程,我想澄清事件处理程序的正确位置。
我注意到我的教授的代码在视图部分包含客户端应用程序的点击处理程序 - 我的代码实现了相同的结果,但我在控制器中包含点击处理程序。
在 MVC 应用程序中,事件处理程序应该位于视图还是控制器中?
在 MVC 应用程序中,事件处理绝对应该放在视图中。程序员普遍误以为事件处理属于控制器,可能是因为它的名字(控制器=sth.控制sth......)。原因是可移植性、代码重用和模块化:想象一下,你想在不同的平台上运行你的应用程序:PC、Web、手机设备。每个特定的平台都有自己的GUI框架,库等,所以如果你在视图中放置100%特定于GUI平台的事件处理内容(例如javafx,swing,android,struts,gwt......),你可以重用控制器和模型,只需要处理一个新的自定义视图。控制器可以看作是视图和模型之间的中介,一个负责模型和视图之间正确交互的中间件。
我认为网络中的MVC只能真正松散地被认为是真正的MVC。在 ASP.Net MVC的情况下,你的javascript事件只能真正成为视图的一部分(尽管应该分成js文件)。
如果你想将js事件与视图完全分开,你将很难过。您最好做出明智的决定,确定哪些事件实际上只与视图相关,哪些事件需要与控制器交互。
例如,单击菜单项以展开和显示子项是"事件",但控制器不需要知道它。但是,基于某些选择加载数据需要将数据发布或通过 ajax 提交到控制器。
通常,视图除了呈现之外不应有任何逻辑。因此,如果您的处理程序需要调用服务器(或执行与渲染无关的其他操作),则它应该在模型或控制器中(取决于框架)。如果你的处理程序需要做一些动画,该逻辑可能应该保留在视图中(如果动画只与视图有关)。
通常,当某个事件在视图上被触发时,它会在其模型(视图模型)上调用一些方法来更新模型的状态。当模型完成更新其状态(与服务器同步)时,它会触发其视图侦听的事件。当视图看到其模型已更新时,它会重新渲染自身。
控制器(或者如果它充当控制器,也可以是一个路由器)通常只实例化视图和模型。
实际上,所有这些都可能取决于您选择的框架。我使用骨干.js。
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- jQuery在MVC应用程序中设置JS变量
- 将 MVC 3 应用程序部署到 URL 文件夹已损坏 JavaScript 和内容路径
- 使用peta poco ORM在MVC应用程序中创建选择列表
- 在 MVC 应用程序中组织 JS 代码
- 有没有一种简单的方法可以将ExtJS 4 MVC应用程序转换为ExtJS DeftJS MVC
- 为什么在Firefox更新之后JQuery不能在我的MVC 4应用程序中工作
- Ajax get jsonp给出错误代码500“;请求被阻止”;来自MVC应用程序
- AJAX上重定向视图的正确方式'成功'MVC应用程序中
- 在asp.net mvc应用程序中的iframe中呈现部分视图
- 将数据导出到 MVC 应用程序中的 Excel
- 选项卡在 MVC 应用程序中不起作用
- JavaScript 弹出窗口阻止程序和 Ajax 回调 - C# MVC 应用程序
- 将值绑定到 Asp.Net MVC 应用程序中的模型
- ASP.NET MVC应用程序中的javascript分离/性能
- 在 mvc 应用程序中使用 href 属性重定向 asp.net 不起作用
- 读取 MVC 应用程序中的资源文件条目
- JQuery 发布到 .NET MVC 应用程序以显示 Google 图表
- asp.net mvc 应用程序中的 Jquery 中的悬停方法
- 从我的 MVC 应用程序获取会话值到我的 Javascript 中