作者tomin (弱水三千 只取一瓢饮)
看板Web_Design
标题[问题] 如何管理大量事件绑定、错误处理
时间Sat Aug 24 12:53:32 2013
我有个页面要做许多事件绑定
最简单的写法是像这样
window.onload = function() {
bind('.delete_button_1').(function() {});
bind('.delete_button_2').(function() {});
...etc
bind('.add_button_1').(function() {});
bind('.add_button_2').(function() {});
...etc
}
这样写虽然会动没问题 但写很多行这类的code看起来很杂 会不好维护
目前我是这样改 尝试模组化 (改法一)
window.onload = function() {
function initDelete() {
bind('.delete_button_1').(function() {});
bind('.delete_button_2').(function() {});
}
function initAdd() {
bind('.add_button_1').(function() {});
bind('.add_button_2').(function() {});
}
initDelete();
initAdd();
}
看起来是比较容易懂 但其实是有点没必要的包装
不过这麽做有个好处是 会比较容易做错误处理
比如delete是次要的功能 可以允许失败 就可以try catch:
try {
initDelete();
} catch (e)
}
initAdd()
其实还有个改法二 写注解区隔就好 >.<
/************************************************
* initDelete start
************************************************
*/
bind('.delete_button_1').(function() {});
bind('.delete_button_2').(function() {});
...etc
/*************************************************
* initDelete end
*************************************************
*/
1.但改法一二其实都不够好 想知道还有什麽更好的写法?
比如是不是可以用OO化的module pattern
定义delete, add为public function
再定义init()去load这些public function?
2.次要功能(可允许失败) 建议全部用try catch包起来吗?
还是最好都全部成功 不会有失败的可能 就不用try catch
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 115.82.115.113
1F:→ DongFeng:如果你两种类型的元素触发的两种方法都是一样的, 为什麽 08/24 13:44
2F:→ DongFeng:不用this取得触发的元素是哪个之後作动作就好 08/24 13:45
你是说像这样吧 方法三:
('button').on('click', function(e) {
if (e.target.className.split(" ")[0] == 'delete_button_1')
doDelete1();
elseif (e.target.className.split(" ")[0] == 'delete_button_2')
doDelete2();
});
这样做某种程度是我要的 至少可以在某个event找到同类型的function
※ 编辑: tomin 来自: 115.82.115.113 (08/24 21:29)
3F:→ DongFeng:doDelete1() 跟 doDelte2() 作的事情是一样的话不能写成 08/24 23:05
4F:→ DongFeng:一个function就好吗? 还是做的事情不同? 08/24 23:05
5F:→ tomin:不一样的 不然我写成('.del1,.del2').on('click,del)就好啦 08/24 23:43
6F:推 akiratw:挑个 MVC 架构的 Library 来用可以方便很多 08/24 23:59
7F:→ akiratw:像 MVW 的 AngularJS 或 MVVM 的 Knockout 之类的 08/25 00:02
8F:→ tomin:感谢楼上 若套用Library 应该可以很精简又漂亮 08/25 00:31