-
Notifications
You must be signed in to change notification settings - Fork 194
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
增加一个DOM事件模块 #6
Comments
我觉得可以有,需要考虑如何设计和组织更好。 假设 |
|
这个,基本上,很难。。。delegate只在click时算比较好用。我觉得,如果要搞,就搞 并且,如果只搞main,现在的直接 |
我原本的设想是,要给某个子元素注册事件的话,先在子元素上挂个 要搞 |
现有实现为main直接 role确实是不太容易玩,理解难度有点大。
这种搞法坏处有两个:
|
每个元素上的事件都会丢在控件的一个私有属性里面保存着,卸载的时候把这个属性跑一遍就能全部搞定。每个事件注册时,在这个属性里都会保存
|
上面这个方案的很大一个缺陷是,在控件还活着的时候如果有移除子元素,内存回收不掉(一直在 |
上面这个方案,看起来在控件dispose时还是能移除掉的。只不过重复render的过程如果不断重新构建子元素则老的移除不掉。 还有,这货貌似应该弄helper里 所以为什么我有时候喜欢生成onclick=“”,因为不用处理释放 |
放helper里是必须的,昨天那时间脑子没这么好使一急就随便写在Control上了。 如果OK的话,我以这个方案实现一下吧?另外会提供可以针对单个 |
你在数组上挂handler属性,真狠。。。 我觉得没问题哈 |
已经在 b1756fb 中加上了,还没测试,测试稍后补上 |
@errorrik 有空把基类中的一些事件迁移到这上面吧 |
测试在 e1b0324 补上了,不全面但能保证基本的正确性,未来有遇上问题再补相应测试用例。 另外各位如果有遇到比较纠结怕出错的地方,或者要改某一处的代码,建议先把测试补了 |
在控件的开发中,免不了要往
main
元素上加事件,也免不了要在dispose()
的时候把这些事件去掉。但是这里存在几个问题:
this
或者me
),这就必然导致事件的处理函数是一个在闭包内的函数(为了固定this
或能引用me
),也进一步导致,在取消这些事件的时候,容易找不回那个处理函数(因为在闭包里)不好取消。dispose()
的时候一一去掉,就要记住注册了哪些事件,用哪些处理函数,这些逻辑全部用代码来写而不抽象出来早晚会混乱。当然一个非常简单的方法,就是参考现在的
controlHelper
模块,用onxxx
属性来挂事件,到时候只要onxxx = null;
就能去掉,但这不仅仅受到 一个事件只能注册一个函数 的限制,同时也只解决了问题1,没解决问题2。看看controlHelper
中的initMouseBehavior
和dispose
中的处理,并不是十分潇洒漂亮的形式,这也仅仅是限定地处理了鼠标相关的,有更多事件的话会更难管理。因此,建议在控件上(事实上是
controlHelper
模块)中添加一个专门负责main
对象上的事件处理,通过addDOMEvent
和removeDOMEvent
、clearDOMEvents
等方法来管理DOM事件,保证注册上就能去掉,而且在dispose()
的时候可以去干净。如果大家认为确实可以有这样一个模块的话,我会负责实现之。
The text was updated successfully, but these errors were encountered: