利用Javascript实现一套自定义事件机制(5)
在自己的控件中使用
上面已经实现了一套事件机制,我们如何在自己的事件中使用呢。
比如我写了一个日历控件,需要使用事件机制。
function Calendar() {
// 加入事件机制的存储的对象
this._event = {};
// 日历的其他实现
}
Calendar.prototype = {
constructor:Calendar,
on:function () {},
off:function () {},
fire:function () {},
one:function () {},
// 日历的其他实现 。。。
}
以上伪代码作为示意,仅需在让控件继承到on、off 、fire 、one等方法即可。但是必须保证事件的存储对象_events 必须是直接加载实例上的,这点需要在继承时注意,JavaScript中实现继承的方案太多了。
上面为日历控件Calendar中加入了事件机制,之后就可以在Calendar中使用了。
如在日历开发时,我们在日历的单元格渲染时触发cellRender事件。
// 每天渲染时发生 还未插入页面
var renderEvent = this.fire('cellRender', {
// 当天的完整日期
date: date.format('YYYY-MM-DD'),
// 当天的iso星期
isoWeekday: day,
// 日历dom
el: this.el,
// 当前单元格
tdEl: td,
// 日期文本
dateText: text.innerText,
// 日期class
dateCls: text.className,
// 需要注入的额外的html
extraHtml: '',
isHeader: false
});
在事件中,我们将当前渲染的日期、文本class等信息都提供给用户,这样用户就可以绑定这个事件,在这个事件中进行自己的个性阿化处理了。
如在渲染时,如果是周末则插入一个"假"的标识,并让日期显示为红色。
var calendar = new Calendar();
calendar.on('cellRender', function (e) {
if(e.isoWeekday > 5 ) {
e.extraHtml = '<span>假</span>';
e.dateCls += ' red';
}
});
在控件中使用事件机制,即可简化开发,使得流程易于控制,还可为实际使用时提供非常丰富的个性化操作,快快用起来吧。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对黑区网络的支持。
