读Ext消息机制有感之简单仿写(一)
来源:互联网 发布:iptv网络电视怎么更新 编辑:程序博客网 时间:2024/05/21 14:40
Ext实现太过复杂,有太多自己的封装,个人感觉给组件绑定事件监听,就是window.addEventListener 或者是window.attachListener。这这两个方法。现阶段自身采用通过读Ext源码来学习js的应用,下面的一些封装是对之前学习到的内容进行一次实战
<%@ page contentType="text/html; charset=UTF-8" %><html><head><script type="text/javascript">Ext = {version: '1.1'};Ext.cacheEl = {};/**@param element: 原生element元素 或者是String类型的id如果是new function创建的对象或者{}类型的,都是返回ture*/Ext.isObject = function(obj) {return Object.prototype.toString.call(obj) == '[object Object]'? true : false;}/**@param source 源@param target 目标,这里的数据拷贝到source的prototype上target可以是fucntion 创建的对象,也可以是{}类型*/Ext.apply = function(source,target) {var _proto = source.prototype;if(Ext.isObject(target)) {for(var el in target) {_proto[el] = target[el]; }}return source;}Ext.Element = function(element) { element = typeof element == 'string'? document.getElementById(element) : element;if(!element) {return null;}var idEl = element.id;if(idEl && !Ext.cacheEl[idEl]) {Ext.Element.toAddCache(element);}this.dom = element;this.id = idEl;}Ext.Manager = function() {//定义其他方法供返回对象里面的方法调用return {addLister: function(event,actor,scope) {var dom = Ext.cacheEl[scope.id].el; //这里其实可以直接用scope.dom或者由上边个参数进来,为了使用Ext.cacheEl,所以这么写if(window.addEventListener) {dom.addEventListener(event, actor);}else{if(window.attachEvent) {dom.attachEvent('on' + event, actor);}}}};}();Ext.apply(Ext.Element,{addListener: function(event,fn) { //addListener('click',function(){})var scope = this;var idEl = scope.id;var eventEl = Ext.cacheEl[idEl].events;eventEl[event] = [fn];function actor(event) {//这里Ext可以将event封装成自身的消息对象fn.apply(this); //执行相应函数,在这里可以定义一些参数,供使用者在编写相应方法时候调用}Ext.Manager.addLister(event,actor,scope);}});/**@param element: 原生element元素*/Ext.Element.toAddCache = function(element) {var obj = {el: element,data: [],events: []}Ext.cacheEl[element.id] = obj;}/**定义几个将原生dom封装成Ext自定义的Element元素*/Ext.get = Ext.find = function(element) {element = new Ext.Element(element);return element;}window.onload = function() {Ext.get('logonbox').addListener('click', function(){alert('响应点击事件');});}</script></head><body><div id='logonbox' >点击按钮</div></body></html>
0 0
- 读Ext消息机制有感之简单仿写(一)
- 读Ext消息机制有感之简单仿写(二)
- 写自己的代码之Ext.extend仿写
- 写自己的代码之Ext.OnReady仿写
- 成员函数指针的应用 之 仿写OC里面UIButton的回调机制(一)
- 高仿QQ之未读消息小球的自定义(一)
- 读《数学之美》有感(一)
- Ext 仿QQ-MSN出现消息框(转载)
- Android异步消息处理机制(一):简单使用
- Android架构分析之Android消息处理机制(一)
- android 消息推送机制之GCM(一)
- Android源码解析之消息机制系列(一)Message
- swing【最后一弹】JTable仿写简单Excel!
- 自己仿写一个ucosii (一)
- <Handler>之简单的消息传递机制
- Android 消息机制(一)
- 消息处理机制(一)
- 写一网络爬虫有感
- 俩周的课后时间自学java
- Debian7/ubuntu 配置cocos2d-x-3.5 以及遇到的问题及其解决方案
- 第8周项目1-2用友元函数完成运算符的重载
- 个人学习php的心得与体验分享
- C++中vector和set删除一亿个数字中的奇数
- 读Ext消息机制有感之简单仿写(一)
- win和win8远程连接显示凭证不工作
- 俩周的课后时间自学java
- [LeetCode]Find Peak Element
- 微营销好标题之故弄玄虚(微营销标题吸引粉丝篇-2)
- 【机器学习】(11):组合学习
- VS2012和matlab 2010b混合编程之环境配
- java读取properties
- 关于Bundle