假设我有大量的图像模型,并且在任何时候,实际上只渲染了50个缩略图视图。我想让用户可以选择从集合中看到另外50个随机图像...所以我想给每个图像模型一个 onDisplay 属性。
show-random方法选择50个随机项并将onDisplay设置为true。其中一些项目可能已经被渲染......如果没有,则创建一个新的缩略图视图并将其附加到图像模型。如果视图已经呈现,那么它只是重新显示/附加到DOM。
如果模型有指向它的指针,则最容易检查视图的存在。但我在这里是否违反了关注点?
答案 0 :(得分:8)
在MVC设计模式中,模型不应该对视图有任何了解。例如,这可以让模型以多种方式查看,比如HTML或在画布元素中呈现。
这可以在下图中看到:
模型只能间接更新视图,例如通过发射事件。
从here复制的图片。
答案 1 :(得分:1)
是的,我同意,你不需要将你的模型与他们的观点结合起来。
onDisplay属性很好。如果您的所有Image模型都在一个集合中,那么只需让另一个“父”视图监听集合上onDisplay属性的更改。
如果属性发生变化,“父”视图可以根据需要渲染/删除缩略图视图(因为它们将是子视图)。
答案 2 :(得分:0)
为什么不制作处理视图缓存的外部方法?当模型去构建一个新视图时,它不会直接构造它,而是将参数传递给那个外部方法。
从模型的角度来看,它正在调用一个通用的“给我一个视图”功能。这是处理缓存的函数。然后,您可以更改该功能以更改行为,而无需直接修改模型。