jQuery向开发者提供了外部接口调用,但是$.Callbacks()模块的开发目的是为了给内部$.ajax() 和 $.Deferred()模块提供统一的基本功能组件。它可以用来作为类似基础定义的新组件的功能。
jQuery.Callbacks是jquery在1.7版本之后加入的,是从1.6版中的_Deferred对象中抽离的,主要用来进行函数队列的add、remove、fire、lock等操作,并提供once、memory、unique、stopOnFalse四个option进行一些特殊的控制。
这个函数常见的应用场景是事件触发机制,也就是设计模式中的观察者模式的发布、订阅机制,目前Callbacks对象用于queue、ajax、Deferred对象中。
Ajax模块
- ajax: function(url, options) {
- //省略代码
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks("once memory")
- ..............
- }
不难发现jQuery.Callbacks还提供“once memory”等参数用来处理:
☑ once: 确保这个回调列表只执行( .fire() )一次(像一个递延 Deferred)。
☑ memory: 保持以前的值,将添加到这个列表的后面的最新的值立即执行调用任何回调 (像一个递延 Deferred)。
☑ unique: 确保一次只能添加一个回调(所以在列表中没有重复的回调)。
☑ stopOnFalse: 当一个回调返回false 时中断调用。
- var callbacks = $.Callbacks('once');
- callbacks.add(function() {
- alert('a');
- })
- callbacks.add(function() {
- alert('b');
- })
- callbacks.fire(); //输出结果: 'a' 'b'
- callbacks.fire(); //未执行
once的作用是使callback队列只执行一次。
本站欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明: 文章转载自:爱思资源网 http://www.aseoe.com/show-13-521-1.html
转载请注明: 文章转载自:爱思资源网 http://www.aseoe.com/show-13-521-1.html