标签:javascript 事件 web prototype iphone6
自定义事件这事儿,得用 MVC。
宝宝和我说,凡是写事件不用 MVC 者,都是耍流氓。我对此深以为然。
其实宝宝只说过后半句。
事件这玩意儿,从实现上来说,需要实现委托注册管理和事件触发回调这两块;从定义上来说,需要由事件服务定义委托管理和事件触发,由事件监听者定义委托注册和事件回调;从角色划分来说,需要分为服务者、触发者、监听者。这套排列组合,你已经乱了是吧。所以说,事件长得是这德性的:
// 服务者 public delegate void EventHandler(object sender, EventArgs e); public event EventHandler SomeEventHandler; protected virtual void OnSomeEvent(EventArgs e) { if(SomeEventHandler) { SomeEventHandler(this, e); } } // 触发者 OnSomeEvent(EventArgs.Instance); // 监听者 SomeEventHandler += (s, e) => {};
好,这就是定义式,交给 C# 来下定义。话说,这个 EventArgs 类用得很传神啊,省得变长参了~用这么重的语言下的定义反而是最简洁的。
所以宝宝说得对,就得用 MVC。
因此,先定义事件服务,才是根本:
app.service('Events', function () { var eventlist = {}; this.on = function (event, callback) { if (!eventlist[event]) { eventlist[event] = []; } eventlist[event].push(callback); return this; }; this.un = function (event) { for (var i = 0, l = eventlist[event].length; i < l; i++) { eventlist[event][i] = null; } delete eventlist[event]; return this; }; this.trigger = function (event) { if (eventlist[event]) { var args = Array.prototype.slice.call(arguments).slice(1); for (var i = 0, l = eventlist[event].length; i < l; i++) { eventlist[event][i].apply(null, args); } } return this; }; })
委托管理完了,完成事件触发:
Events.trigger('Event1', 'Para1', 'Para2').trigger('Event2', 'Para1');
然后就是委托注册和事件回调:
Events.on('Event1', function (e, f) { // 操作 e f }).on('Event2', function (e) { // 操作 e });
这就写完了。没法儿再简洁了。
---------------------------------------
紫鹃依旧香甜。
港版 iphone6 下个月就差不多了。
6P 的问题太多了,连自己的系统应用都坑。如果这款产品没有后续的话……总归,6P 是不能要的。
JavaScript 自定义事件而不用 MVC 者,都是耍流氓
标签:javascript 事件 web prototype iphone6
原文地址:http://blog.csdn.net/hikaliv/article/details/41444067