0

我对在示例上下文中使用 MVC 表示怀疑,如下所示:

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

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

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

  3. 所以现在我有了控制器,它可以处理这个文本框和多个形状视图。文本框值的更改使控制器可以采取必要的步骤来旋转形状。

问题:

那么问题来了,控制器是否应该直接访问shapeview的shapeModel并调用rotate方法呢?或者控制器应该调用 shapeView 的旋转方法,内部调用 shapeModel 的旋转方法?

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

4

1 回答 1

1

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模型,该模型不应保留在 View Controller 中,而是应将其绑定到全局命名空间并通过全局命名空间设置其属性。

您也可以像这样在模型上绑定事件

shapeView = new ShapeView
shape = new Shape
shapeView.listenTo shape, "change:angle", shapeView.update_angle

这样,您可以拥有多个控制器,监听相同的数据模型并相应地更新视图。

模型和视图控制器应该尽可能地解耦。

于 2013-11-06T10:26:06.447 回答