在inEdit包里面有一个inCore.js的文件,这个文件的对象是inEdit的基础.
在这里面设计的几个对象里面inQueue队列处理对象是比较特殊的一个.
inQueue
:对序列化函数调用的处理(由于目前仅有Event有实例可讲,所以我只能说这个了)
inQueue认为DOM事件的处理也属于队列,不管是一个Element上绑定了多个事件,还是绑定了同一个事件的不同函数调用,又或是冒泡到父级节点Element的事件处理,都是一个函数调用的队列,因此完全可以把这些封装起来管理.而且管理后因为所有相关的Element和函数都被保存起来,更有利调试和处理.
inQueue是这样封装
的:对Element D 增加事件 T
的
响应
函数 F,就好象这样的代码
var D=document.getElementById('id');
var T='onclick';
var F=function(ev){alert('onclick Event')};
D.attachEvent(T, F)
这是一个很常见的代码,这个代码中有几点不方便的地方
- 函数F被调用的时候不能指定this.如果F是某个对象obj的成员,希望F被触发的时候可以保持this为obj就更好了.
- 不能向F传递附加的参数,这个你说可以用特定的一个变量附加在某个对象上,不错方法正确,inQueue也是这样做,而且让他更合理
- event的兼容性问题,我们知道,上面的代码是IE下的代码,Firefox下就要用addEventListener,类似这样的问题还很多,要尽可能的把这些ev进行兼容性处理,来保证被调用的函数不再为此操心
inQueue正是要解决这些问题.inQueue把上面3项
- D,在inQueue里称为域 domain
- T,在inQueue里称为类型 type
- F,在inQueue里还是 fun
还包括this的设置,以及要传递给fun的参数都保存起来,然后从新设定事件触发的函数到inQueue生成的一个函数里,在这个函数里可以访问被保留的这5项参数,根据参数对原始目的的fun进行调用
,从而完善前面说的不便
.
inQueue的API:
- findQueue(domain,type,returnindex)
查找一个一个队列是否存在,一般用不到
- addQueue(withthis,domain,fn,type)
添加单个队列,一般用不到
- removeQueue(domain,type)
删除一个或全部队列
- fireQueue(withthis,domain,type,e)
触发/传递Event事件,一般用不到
- addCmd(cmd,fn)
为对象自己增加this域命令队列,我自己都不知道什么情况下用,仅仅是理论上的
- fireCmd(cmd)
触发一个队列命令,如果附加了参数那么会覆盖 addCmd 中的附加参数,我自己都不知道什么情况下用
- addEvent
(withthis,elem,type,fn)
添加 DOMElement 事件,这个是最实用的了,重点就说他了.
- fireEvent(withthis,e,elem)
模拟或者转发某一个 DOMElement 的事件,我自己都不知道什么情况下用,仅仅是理论上的
API不多(源代码里的注释有些是多余的,因为改了好几次,有些注释是历史遗留的,回头再清理),这里重点介绍的就是addEvent了直接代码说话吧
,注意autoRemoveQueue的用法
/* 一般情况下不应该直接对inQueue进行操作,应该先生成一个新的对象
* 当然直接用inQueue对象也可以
* {autoRemoveQueue:true}是告诉inQueue,当页面关闭,或刷新时自动的删除所有的事件
*/
var myQueue=inMixin({autoRemoveQueue:true},inQueue);
var myobj={
evclick:function(ev,arg1,arg2){alert('evclick:'+arg1+arg2)}
}
myQueue.addEvent(myobj,document.body,'click',myobj.evclick,'附加参数1','附加参数2');
如何终止队列
或者是终止冒泡
事件
inQueue根据原始事件的返回值和ev的cancelBubble属性进行判断,比如继续按上面的代码
var myobj={
//这将终止队列但是冒泡会继续
evclick1:function(ev,arg1,arg2){alert('evclick:'+arg1+arg2);return false;},
//这将终止队列并终止冒泡,其实终止冒泡是cancelBubble=true通知了系统终止冒泡的
evclick2:function(ev,arg1,arg2){alert('evclick:'+arg1+arg2);ev.cancelBubble=true;return false;},
}
注:对于理论上的东西,由于没有经过实战,所以代码并不可靠,仅仅是一个想法
分享到:
相关推荐
- UniComboBox in hidden TabPage bug in Chrome browser - UniApplication: New ClientInfo property - New Demo: TreeView - New Demo: ClientInfo - New Demo: Windowless 0.80.2.796 +----------------------...
- **版权所有**:1989-2001 by Sybase, Inc. #### 五、产品线介绍 Sybase ASE是Sybase产品线中的核心组件之一,此外还包括: - **认证服务**:SYBASE Certified Professional、SYBASE Professional Column Design等...
421 | [Maximum XOR of Two Numbers in an Array](https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/) | [C++](./C++/maximum-xor-of-two-numbers-in-an-array.cpp) [Python](./Python/...
.\Source\Include (was Delphi\Vc32) .inc files (including OverbyteIcsDefs.inc) .\Source\Extras (was Delphi\Vc32) Extra source code not built into packages .\Source\zobj125 (was Delphi\Vc32) ZLIB C OBJ ...
#### Implement Queue with Limited Size of Arrays(利用有限大小数组实现队列) - **数据结构**:队列是一种先进先出的数据结构。 - **实现要点**: - 设计一个循环队列,利用数组实现。 - 需要关注队列的满与空...
Swift 3.0 更新了 `UIViewController` 返回是否显示状态栏的方法,以适应新的 API 设计标准。 #### 六、字符串长度的获取 获取字符串长度的方法在 Swift 3.0 中也有所改变,不再直接通过 `.length` 属性获取,而是...
'string', 'INC', 'callback', {'v=eval(get(h_edit,"string"));',... 'set(h_edit,"string",int2str(v+1));'}); % 创建 DEC 按钮 h_but2 = uicontrol('style', 'pushbutton', 'position', [80 50 50 20],... '...
- **定义**:此表记录了WORKFLOW MANAGER中关于源、目标数据库连接的定义,包括Relational Connection、Queue Connection、Loader Connection等。 - **示例**: - `OBJECT_NAME`: Oracle_Source - `USER_NAME`: ...
5.4. Advanced Packet and Queue Functions 16 5.4.1. WTPacketsPeek 16 5.4.2. WTDataGet 17 5.4.3. WTDataPeek 17 5.4.4. WTQueuePackets (16-bit only) 18 5.4.5. WTQueuePacketsEx 18 5.4.6. WTQueueSizeGet 19 ...
Issue 11623: Remove leftover handling of GWT’s change edit identifiers. Issue 11562: Fix handling of the “Send feedback” conditional display. Fix regular expression in link text parsing. Issue ...
Pointerscan for value scans now add the results to the overflow queue Opening a file and changing bytes do not change them to the file anymore (you need to explicitly save now) Added an option to the ...
2018\09\10 周一 17:27 <DIR> OEM Printer Customization Plug-in Samples 2018\09\10 周一 17:27 <DIR> OpenXPS Documents Print Sample 2018\09\10 周一 17:27 <DIR> PassThrough File System Minifilter Driver ...
powerful scheduling features like application priorities, intra-queue preemption across applications, and operational enhancements including insights through Timeline Service v2, a new web UI, better...
Timber [WIP][BETA]-Material Design Music...Playing queue in notification (Xposed) Changelog Changelog is available here Credits CyanogenMod's Eleven Music Player TimelyTextView MultiViewPager PlayPaus
Messages are placed in the queue and retrieved by the message loop. - **Message Loop**: The message loop retrieves messages from the queue and dispatches them to the appropriate window procedures. - ...
CREATE OR REPLACE PROCEDURE procedure_name (p1 IN NUMBER, p2 OUT NUMBER) AS BEGIN ... END; ``` - **创建函数:** ```sql CREATE OR REPLACE FUNCTION function_name (p1 NUMBER) RETURN NUMBER IS BEGIN ...
- 中序遍历(Inorder Traversal) - 后序遍历(Postorder Traversal) - 层次遍历(Level Order Traversal) 以上总结了文档中提到的关键知识点,包括数据结构、树与图算法、动态规划和递归算法等方面的内容。这些...