在模型或控制器上放置一个事件?

时间:2011-11-29 19:25:17

标签: model-view-controller mvp

这是针对客户端MVP程序,使用被动视图。

我想允许用户创建联系人并将其添加到报价中。我希望在创建联系人时通知报价。

做a)或b)更好吗?

a)听取模特

将联系人传递给联系人控制器,并在模型上侦听已保存的事件

var contact = new Contact()
contact.on('saved', function(contact){ do some stuff })

contactsController.create(contact)

contactsController然后将联系人加载到视图中,用户输入一些信息,点击保存,联系人保存到服务器,触发了被触发的事件

b)听取控制器

contactsController.on('saved', function(contact) { do some stuff })
contactsController.create()

contactsContoller然后创建联系人模型,将联系人加载到视图中,用户输入一些信息,点击保存,联系人保存到服务器,contactsController.saved事件被触发

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为这取决于想知道联系人何时保存到数据库与想知道用户何时提交保存联系人页面之间的微妙但重要的区别。即,控制器可能不是唯一保存联系人的地方。如果您想了解前者,请使用该模型。如果你想知道后者,请使用控制器。

答案 1 :(得分:1)

我会推荐以下内容。

  • 用户点击添加联系人
  • 视图告诉Presenter已添加联系人
  • 礼物执行为处理添加联系人的命令

命令执行以下操作

  • 显示允许用户添加联系人的对话框或视图。
  • 命令等待用户单击“添加”或“确定”以确认新联系人
  • 然后命令更新模型
  • 命令告诉正确的演示者*已添加联系人。

然后在处理查询的Presenter中,Update Contact调用将查找所有相关查询并更新联系信息。此更新可以通过侦听器模式完成,其中所有查询视图都向演示者注册。

*右侧演示者是您设置的任何演示者,用于处理显示查询的视图。有些系统可能有一个独特的演示者用于显示查询,而另一些系统可能只是演示者的一部分,其中查询显示只是较大显示的一部分。