控制器是否应直接访问视图的模型
Should a Controller access a view's model directly?
我对MVC在示例上下文中的使用表示怀疑,如下所示:
考虑一个小绘图应用程序的示例。
-
现在假设例如,有一个文本框,用户可以在其中输入所选形状的 ANGLE,预期结果应该是,每个选定的形状都应根据文本框中指定的角度旋转。
-
假设我有一个形状对象,它是一个名为 ShapeView 的视图给定的视图有自己的数据,如它的位置、当前旋转角度、笔触颜色、填充颜色等......所以我有一个形状模型作为形状模型
-
所以现在我有了控制器,它处理这个文本框和多个形状视图。文本框值的更改允许控制器采取必要的步骤来旋转形状。
问题:
所以问题是,控制器是否应该直接访问形状视图的 shapeModel 并调用旋转方法?或控制器是否应该调用 shapeView 的旋转方法,该方法在内部调用 shapeModel 的旋转方法?
简而言之,任何外部实体是否应该直接访问视图的模型?还是应该只通过视图?直接访问模型是个好主意吗?如果我访问,有任何问题或疑虑。?
Backbone 中的视图表现为控制器。
例如
ShapeView = Backbone.View.extend
el: "input#angle"
events:
"onkeypress" : "update_angle"
update_angle: (ev)->
angle = $(ev.target).val()
@rotate(angle)
大多数情况下,您不需要为同一视图添加其他控制器。ShapeView
控制器可以自行处理所有事情。它负责为其创建的视图。如果您需要访问其他视图控制器或模型,您可以将它们挂接在全局命名空间上,例如 App = App || {}
如果您有许多值并且这些值需要从其他控制器访问,则可以创建一个Shape
模型,该模型不应保留在视图控制器中,而应将其绑定到全局命名空间并通过全局命名空间设置其属性。
您还可以像这样绑定模型上的事件
shapeView = new ShapeView
shape = new Shape
shapeView.listenTo shape, "change:angle", shapeView.update_angle
这样,您可以拥有多个控制器,侦听相同的数据模型并相应地更新视图。
模型和视图控制器应尽可能分离。
- 如何在视图模型contet更新更新上调用Jquery函数
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 在MVVM视图模型中处理应用程序范围的元素
- 将c#视图模型转换为javascript模型时转义HTML标记
- 使用knockout.js将数组绑定到视图模型
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 聚合物:在不同的视图模型中多次使用元素
- 使用AMD时未定义淘汰组件视图模型
- 如何在Knockout.js中选中复选框时更新视图模型及其依赖项
- 无法将对象列表从视图模型设置为 javascript 变量
- 挖空视图模型函数仅影响最后一个实例
- 挖空.js嵌套视图模型不起作用
- 为什么我的视图模型不起作用
- 挖空、视图模型位于其他对象和数据绑定中
- 如何将经度/经度值绑定到挖空视图模型方法
- 挖空.js:等待视图模型实例化完成
- 在Knockout视图模型中调用jQuery插件是一种有效的模式
- KnockoutJS:如何避免在applyBindings上运行视图模型函数
- 使用knockoutjs操作视图模型
- Kendo UI自定义验证不适用于模板和视图模型