Javascript 控制器是否应访问视图';什么是直接的模型?

Javascript 控制器是否应访问视图';什么是直接的模型?,javascript,model-view-controller,backbone.js,mvvm,simple-mvvm,Javascript,Model View Controller,Backbone.js,Mvvm,Simple Mvvm,我对MVC在以下示例中的使用表示怀疑: 考虑一个小型绘图应用程序的示例 例如,现在有一个文本框,用户可以在其中输入选定形状的角度,预期结果应该是,每个选定形状都应该按照文本框中指定的角度旋转 假设我有一个形状对象,它是一个名为ShapeView的视图 给定的视图有自己的数据,如位置、当前旋转角度、笔划颜色、填充颜色等。。。 所以我有一个形状的模型作为ShapeModel 现在我有了控制器,它处理这个文本框和多个形状视图。文本框值的更改允许控制器采取必要步骤旋转形状 问题: 所以问题是,控制器是否

我对MVC在以下示例中的使用表示怀疑:

考虑一个小型绘图应用程序的示例

  • 例如,现在有一个文本框,用户可以在其中输入选定形状的角度,预期结果应该是,每个选定形状都应该按照文本框中指定的角度旋转

  • 假设我有一个形状对象,它是一个名为ShapeView的视图 给定的视图有自己的数据,如位置、当前旋转角度、笔划颜色、填充颜色等。。。 所以我有一个形状的模型作为ShapeModel

  • 现在我有了控制器,它处理这个文本框和多个形状视图。文本框值的更改允许控制器采取必要步骤旋转形状

  • 问题: 所以问题是,控制器是否应该直接访问shapeview的shapeModel并调用rotate方法? 或 控制器是否应该调用shapeView的rotate方法,该方法在内部调用shapeModel的rotate方法


    简而言之,任何外部实体是否应该直接访问视图的模型?还是应该只通过视图?直接访问模型是个好主意吗?如果我访问,是否有任何问题或顾虑?

    主干中的视图作为控制器运行

    例如

    大多数情况下,同一视图不需要额外的控制器。
    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