javascript - Backbone : Are Views really Controllers?

标签 javascript model-view-controller view backbone.js

我正在构建我的第一个 Backbone.js 应用程序,但我很困惑我应该向 View 赋予或隐藏多少责任。

在我的示例中,我正在构建一个从集合动态生成的丰富 UI 表(类似于 YUI 的数据网格)。在我的应用程序中,我将其称为“AppTable”。根据我对 MVC 的理解,我想象会有某种 AppTable Controller 找到正确的 Collection,获取“哑”View 并将需要渲染的 Collection 中的任何信息传递给 View。在这种情况下,View 只会获取提供给它的数据并相应地修改 DOM,甚至可能填充模板或附加事件监听器。

Backbone 似乎废除了让 Controller 在 View 和集合之间进行调解的想法。相反, View 通过对集合的引用进行初始化,并且 View 负责更新自身。

我对这个架构的理解正确吗?

假设我这样做了,我的问题就变成了,当我的 View 需要做越来越多的事情时会发生什么?例如,我想要列排序、行拖放、分页、搜索、表控制链接(如新建、复制、删除行...等)等等。如果我们坚持“智能” View 范例,其中 View 直接连接到集合,上述函数是否会附加到 View 对象?

仔细思考一下,我可以看到 View 从一个简单的表格包装器成长为带有许多附加功能的相当困惑的野兽。那么,在这种情况下,View 真的是一个 Controller 吗?

最佳答案

您对架构的理解是正确的。 Backbone 不承认传统 MVC 意义上的“ Controller ”概念。 (事实上​​,Backbone 曾经实际上有一个名为 Controller 的对象,但它已被重命名为 Router 以更准确地描述它的功能。)

您列出的功能(拖放、删除行、排序等)都属于 View 。 View 描述您所看到的内容并响应用户输入。任何涉及事件(单击、按键、提交等)的内容都位于 View 内部。但你的 View 永远不应该实际操纵数据;这应该由它的模型来完成。您认为 View 就像 Controller 一样,这是正确的,因为它打包数据并将其发送到模型,然后模型将适本地验证/设置/保存。一旦发生这些操作, View 就会重新呈现自身以表示模型内数据的新版本。

需要注意的是:您的 View 不应该与 DOM 过于紧密地联系在一起。 Backbone 约定是让您的 View 绑定(bind)到一个顶级 DOM 元素(例如,表单或 div),然后仅处理其子元素。这是适当的;一般来说,您的 View 中的“从该 div 中删除此链接”之类的内容不是。如果您发现您的 View 变得笨拙,您很可能需要将其分解为 subview ,每个 subview 都有各自的行为作为其整体的组成部分。

关于javascript - Backbone : Are Views really Controllers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8130331/

相关文章:

java - 如何在 Spring Boot 中将 POST 请求从一个 Web 应用程序正确转发到另一个 Web 应用程序?

php - Codeigniter 模型只是实用程序类?

android - 动态添加的TextView的宽度和高度为零

javascript - 有人尝试在嵌入式环境中运行node.js 或原始v8 引擎吗?

javascript - 主干-合并: true - option not changing UI

c# - 如何在我的 View 中仅显示不同的名称(来 self 的模型)?

android - 在 Android 中使用哪个 View 以及如何每页显示 n 个值

javascript - 通过 id javascript 填充文本字段

javascript - 在 Chrome 和 IE 中记录元素的不同输出

javascript - 用于 Bootstrap 多选的很棒的 Bootstrap 复选框