JavaScript中的被动视图

时间:2010-07-20 19:37:18

标签: javascript model-view-controller mvp passive-view

我正在考虑在JavaScript中实现MVP - 被动视图模式。在大多数情况下,视图将是简单的dom元素,其中演示者附加事件侦听器。但是,当涉及到基于JavaScript的伪选择框,自动建议或aria功能等小部件时,它应该是JavaScript视图类的一部分还是更改视图的逻辑应该是演示者的一部分? 我查看了javascriptMVCs view,似乎它们只是模板生成的html而没有任何逻辑。但是对于我来说,一个听html选择框的主持人和一个用javascript逻辑来模仿一个真实选择框的伪选择框之间似乎没有什么不同。两者都不应该关心盒子如何在内部工作,他们只需要听取改变事件。

那你觉得怎么样?什么是观点课的工作。

3 个答案:

答案 0 :(得分:2)

View对象应该负责绘制自己。被动视图知道如何来做事情,而不是做什么。它必须负责解雇自己的事件。仅仅因为它是一个自定义选择框小部件,它与常规选择框没有任何区别。

如果演示者接管了所有视图职责,则根本不需要视图。不妨只有一位主持人。

答案 1 :(得分:1)

JavaScriptMVC的视图是虚拟客户端模板。它的节点控制器倾向于采用更传统的View角色。

答案 2 :(得分:1)

视图的工作是视图技术的adapter。在这种情况下,您的视图技术可能是通过JavaScript的jQuery over HTML。该视图应该设计为做三件事:

  • 了解事件何时发生,并将这些事件传达给演示者(这可能是间接的,使用postal.js之类的消息传递框架)
  • 告诉演示者(被问及时)“ x ”的价值是什么,其中 x 是视图中显示的值。
  • 接受来自演示者的消息(通常通过直接方法调用)来更改视图上的值。

被动视图模式中的视图是非状态。我再说一遍,视图不代表州。我的意思是,所有状态和状态转换的知识都由演示者表示。视图只是在演示者和实际视图技术之间提供间接的粘合剂。 除了上面提到的三个要点之外,它并没有包含任何有关如何处理其所含信息的知识。这很重要,因为您永远不应期望视图处于一致状态。您应该始终让演示者负责管理视图的状态。

enter image description here

上面的堆栈演示了我如何预见模型,视图和演示者的交互,以及它们与视图技术和控制器的关系。

  • 浏览器,HTML和DOM(通过jQuery管理)是查看技术。这些本质上很复杂,无法代表您的模型。
  • 视图可保护您的逻辑免受查看技术的影响。它提供间接,以便您可以专注于演示者中的普通旧代码。视图使用某种消息传递,以便与演示者进行通信。这可以防止视图和演示者之间的双向依赖关系。它还允许多个演示者操纵视图。
  • 演示者应负责了解视图的抽象性质,并应根据其与视图的接口管理模型的状态。它能够理解如何从控制器中检索模型,以及如何将模型保留回服务器。
  • 模型特定时间点的状态表示。它还可以充当控制器演示者之间的DTO。在JavaScript中,只需将演示者行为添加到模型即可轻松实现。
  • 控制器协调应用程序中的导航,并负责从演示文稿中抽象后端服务。