假设用户可能从集合{A,B,C}中选择一个div并将其添加到div X,除了每个div具有可能依赖于应用程序状态和每个div的某些内在属性的不同规则。最后在添加div时,每个div可能会触发不同的事件。
例如,在一个应用程序状态中,用户:
尝试将A添加到X:A添加到X,没有其他事情发生
尝试将B添加到X:B添加到X,触发一些其他事件
尝试将C添加到X:不允许,C返回到某个已定义的原始状态(例如,如果我尝试通过拖放将C添加到X,则C返回到原始位置)。
假设已经渲染了所有三个div,并且每个div都存在一个模型,视图和控制器。
随时告诉我你在这个过程中看到的逻辑部分以及你将它放在哪里。但请回答:
我在Ember.js中实现了类似的东西,它对事物有一些想法,但即使你不使用它/从未听说过它也请回答。
答案 0 :(得分:3)
应在视图中实现拖放操作。当项目被删除时,它应该触发一个被发送到路由器的动作。路由器(作为应用程序的状态机)应根据当前状态适当地响应操作。确定适当的操作可以完全基于状态,或者考虑模型或控制器的各个方面。
操作应该操作模型和/或控制器,视图层中的绑定/观察者应该使视图与模型/控制器的新状态同步。
控制器不应该知道DOM。
希望有所帮助!我在此处提供的演示文稿中介绍了职责分工:http://www.lukemelia.com/blog/archives/2012/08/23/architecting-ember-js-apps/