如果从一个 View 中用户输入了一些无效数据,例如:
电子邮件:bill@apple.com
然后我希望 Controller :
- 不将数据放入模型
- 将文本框着色红色
- 不允许用户保存
但如果用户在不同的 View 中输入相同的无效数据,我可能希望 Controller :
- 将数据放入模型
- 将文本框涂成红色
- 允许用户保存
但如果用户在不同的 View 中输入相同的无效数据,我可能希望 Controller :
- 将数据放入模型
- 将文本框着色为蓝色
- 允许用户保存
另一个 View 可能会:
- 将数据放入模型
- 保留文本框未着色
- 允许用户保存
另一个 View 可能会:
- 自动更正数据,将其放入模型
- 将文本框着色为红色
- 允许用户拥有
另一个 View 可以:
- 自动更正数据,将其放入模型
- 用新数据更新 View
- color 蓝色文本框
- 允许用户保存
[无限]
如果不为 n-views 使用 n-controllers,我该怎么做?
更新
我正要问一个关于 stackoverflow 的新问题,“我如何让 Controller 根据 View 改变它的行为。”但后来我意识到我已经在使用完全相同的问题标题。
今天的例子:
如果输入的数据对于它将进入的某些数据库表的某些部分来说太长,则执行验证并拒绝保存。
除非数据来自另一个 View 。在这种情况下自动修剪某些字段以适应数据库规则
除非数据来自另一个 View 。在这种情况下,要求数据库抛出它的
truncated
异常
在我读过的书籍/文章/博客中,我从来没有看到 MVC 的许多实际问题得到解决 - 难怪我不使用它。
最佳答案
每个 View 必须执行的操作的逻辑必须驻留在某个地方。我建议您使用该信息授权 View ,而不是使用多个 Controller ,或在单个 Controller 内的 View => 配置之间创建某种映射。
我不知道这些 View 在您的域中代表什么,但如果可以将无效数据保存到模型中,如果允许自动更正,无效的视觉指示,看起来 View 似乎是命令数据等。为什么不用所有这些信息来增强 View ?
这些 View 中的每一个都具有特定的属性。
acceptsInvalidData => boolean, place invalid data to model
requiresAutoCorrection => boolean, auto-correct the data
synchronizeWithModel => boolean, always keep the view in sync with the model
allowsSavingInvalidData => boolean, allow saving of invalid data
invalidDataIndicator => string:color, how to color view for invalid data
鉴于这 5 个属性(可能缺少一个或两个), Controller 可以启动一系列操作,这些操作将唯一地处理每种类型的 View 。 View 必须将自己或属性暴露给 Controller 。
关于model-view-controller - 如何让 Controller 根据 View 改变其行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2464824/