浏览 2134 次
锁定老帖子 主题:【YUI组件】开发风格&微调控件
精华帖 (0) :: 良好帖 (11) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-20
最后修改:2010-08-21
前段时间的学习,试着分析了一下Calendar组件,却发现比较大,大致了解到组件的一般开发风格。我们在使用Calendar组件,两步,init();然后render();
init()所做事情有以下:
render()所作的事情很简单,就是创建日期组件所需的Element,在创建的时候,也许调用者想特殊处理一些信息,则将Event.fire(),调用者对事件subscribe来处理特殊;比如在日期创建之前想将页面做些其他改变。效果类似AOP面向切面。
render : function() { //render之前的事件接口 this.beforeRenderEvent.fire(); var workingDate = DateMath.findMonthStart(this.cfg.getProperty(DEF_CFG.PAGEDATE.key)); this.resetRenderers(); this.cellDates.length = 0; Event.purgeElement(this.oDomContainer, true); var html = []; html[html.length] = '<table cellSpacing="0" class="' + this.Style.CSS_CALENDAR + ' y' + (workingDate.getFullYear() + this.Locale.YEAR_OFFSET) +'" id="' + this.id + '">'; //这里就是浏览器会读取到的HTML代码。 html = this.renderHeader(html); html = this.renderBody(workingDate, html); html = this.renderFooter(html); html[html.length] = '</table>'; this.oDomContainer.innerHTML = html.join("\n"); //内部事件的监听处理,比如日期组件的《》按钮的click事件 this.applyListeners(); this.cells = Dom.getElementsByClassName(this.Style.CSS_CELL, "td", this.id); this.cfg.refireEvent(DEF_CFG.TITLE.key); this.cfg.refireEvent(DEF_CFG.CLOSE.key); this.cfg.refireEvent(DEF_CFG.IFRAME.key); this.renderEvent.fire(); }, 组件开发后还要添加上一句话: YAHOO.register("calendar", YAHOO.widget.Calendar, {version: "2.8.0r4", build: "2449"}); 用来方便YUI在YUILoader的时候的版本冲突控制。
仿造以上的开发风格,将网上的一个微调控件进行改装,符合YUI 组件的开发模式。效果如下:
升级为时间组件
进一步扩展日期组件:
开发中学到的小技巧: setInterval的时候,需要将组件的this传递进去,可是因为setInterval是全局的函数,this为指到浏览器Dom。 var me=this; this._interval = setInterval(function(){me.Run();},150); 使用这样的方法可以将调用函数的this变换,比较简单。
以上个人浅见,错误的地方欢迎大家指正。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |