利用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'; } });
在控件中使用事件机制,即可简化开发,使得流程易于控制,还可为实际使用时提供非常丰富的个性化操作,快快用起来吧。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对黑区网络的支持。