Javascript 控制器是否应访问视图';什么是直接的模型?
我对MVC在以下示例中的使用表示怀疑: 考虑一个小型绘图应用程序的示例Javascript 控制器是否应访问视图';什么是直接的模型?,javascript,model-view-controller,backbone.js,mvvm,simple-mvvm,Javascript,Model View Controller,Backbone.js,Mvvm,Simple Mvvm,我对MVC在以下示例中的使用表示怀疑: 考虑一个小型绘图应用程序的示例 例如,现在有一个文本框,用户可以在其中输入选定形状的角度,预期结果应该是,每个选定形状都应该按照文本框中指定的角度旋转 假设我有一个形状对象,它是一个名为ShapeView的视图 给定的视图有自己的数据,如位置、当前旋转角度、笔划颜色、填充颜色等。。。 所以我有一个形状的模型作为ShapeModel 现在我有了控制器,它处理这个文本框和多个形状视图。文本框值的更改允许控制器采取必要步骤旋转形状 问题: 所以问题是,控制器是否
简而言之,任何外部实体是否应该直接访问视图的模型?还是应该只通过视图?直接访问模型是个好主意吗?如果我访问,是否有任何问题或顾虑?主干中的视图作为控制器运行 例如 大多数情况下,同一视图不需要额外的控制器。
ShapeView
控制器可以自己处理所有事情。它负责为其创建的视图。如果需要访问其他视图控制器或模型,可以将它们挂接到全局命名空间上,例如App=App | |{}
如果您有许多值,并且需要从其他控制器访问这些值,则可以创建形状
模型,该模型不应保存在视图控制器中,而应将其绑定到全局命名空间,并通过全局命名空间设置其属性
您还可以像这样在模型上绑定事件
shapeView = new ShapeView
shape = new Shape
shapeView.listenTo shape, "change:angle", shapeView.update_angle
通过这种方式,您可以拥有多个控制器,监听相同的数据模型,并相应地更新视图。
模型和视图控制器应该尽可能地解耦。嗨,我不是指与多个控制器相关的东西。我的意思是控制器应该直接调用模型的rotate方法吗?或者它应该只调用视图的rotate方法,然后视图处理内部rotate方法的调用。我的意思是,主干中没有纯“控制器”的概念。视图是某种控制器。视图应该倾听模型的变化,并在角度变化时进行旋转。不会直接调用rotate方法。引用backbonejs.org“当模型更改时,视图只会更新自己。”是的,我接受控制器不存在于主干中的事实。但我的问题有点笼统,控制器应该直接访问某个视图的数据结构/模型吗?我希望这次我明白了。
shapeView = new ShapeView
shape = new Shape
shapeView.listenTo shape, "change:angle", shapeView.update_angle