zhaoda / spa

A webapp framework for routing control and view transitions
http://zhaoda.net/spa/docs/
MIT License
330 stars 92 forks source link

关于内部事件机制 #9

Closed qdsang closed 10 years ago

qdsang commented 10 years ago

请问为什么设计成window对象事件,为什么不直接对象内处理了?

zhaoda commented 10 years ago

解耦

qdsang commented 10 years ago

耦合是指什么搅合在一起了?

zhaoda commented 10 years ago

@qdsang 接口设计成事件机制,就是为了业务逻辑代码的解耦,比如两个视图,他们的代码在不同的文件不同闭包中,他们之间在业务中需要有关联,比如从视图A到视图B,至少需要在B中拿到A的一些信息,如果通过全局变量对象(全局命名空间)或者通过函数接口传递参数,代码直接的耦合性较多,通过事件机制,不会造成过多的代码污染。

或者举一个例的例子,组件A和B,业务上A的某个逻辑执行后需要执行B中的逻辑,那么A通过$A.trigger('A:done')来通知全局(事件从A一直冒泡到document),然后在B中可以绑定$doc.on('A:down', function() { // do somethine of B})来获取这个通知;突然,业务上又需要在A的这个逻辑执行完毕后再增加组件C中的逻辑,那么此时A和B都不用改动,只要在C中也通过绑定$doc.on('A:down', function() { // do somethine of C})来接受事件通知就好了。

qdsang commented 10 years ago

我想的是那为什么不直接定义个事件对象,除掉了对dom对象的依赖。 感觉都向dom节点上加,不利于优化 提到的全局通知冒泡,这个地方是不是为了区分页面?

zhaoda commented 10 years ago

关于事件通知的机制,推荐你看一下Flight框架 https://github.com/flightjs/flight