今天讲一个jQuery封装好的方法:$.Callbacks。这个东西有什么用呢?这个东西其实没有什么具体的效果,而更像是一个现成的工具,一个快速使用观察者模式的一个工具。

观察者一般具有订阅,删除,发布等功能,而这些正好都是$.Callbacks具备的,而且有更多的配置,这样就省得每次我们想用观察者的时候自己再去实现一遍了,直接用$.Callbacks就好了。今天我们就来看看这个是怎么玩的。

常用功能

最常用的估计就是add,remove,fire了,这个也是观察者最常用的三个方法,先来一个最简单的demo看一下如何使用:

上面就是最简单的使用方法,$.Callbacks内部维护了一个数组,通过add方法往数组加内容,通过fire方法执行数组内的方法,让数组内的每个方法执行。

不过在$.Callbacks里面不是每次都会执行数组内的所有方法的,而是有四种不同的方式,once,unique,memory,stopOnFalse。

once

这个简单,就是永远只会执行一个fire,其他的fire不再执行了。

图示如下:

background Layer 1 f1 f2 fire fire f3 f4 fire 执行 不执行 once表示只有第一次fire执行

注意:第一次fire会执行在数组内的方法,但是假如你延迟加入了一个方法,那么fire是不会执行它的,因为这个时候它还不在数组内。

memory

这种执行方式是比较难理解的,memory在fire的时候会看后面有没有add(下一次fire之前的add),如果有add那么一起执行(如果有remove不计算):

图示如下:

background Layer 1 f1 f2 fire fire 删除f2 fire 执行 执行 第一次fire 执行 执行 第二次fire 忽略 下一个fire之前的add 下一个fire之前的remove 执行 被删除了 第三次fire memory在本次fire的时候,会执行下一个fire之前的add

这个就是本次fire的时候,下次fire之前的add都会被执行,如果是remove不会删除,只会执行下一个fire前的add。

unique

这个比较好理解,就是每次fire只是执行不同的方法,相同的方法只会执行一次:

图示如下:

background Layer 1 f1 f1 fire fire 删除f2 fire f2 第一次fire 执行 第二次fire 执行 不执行 执行 重复 第二次fire 执行 不执行 被删除 重复 unique每次fire的时候,只执行不同的方法

stopOnFalse

这个就是在每次fire的时候,如果一旦发现有返回false的,那么就会停止执行后面的:

图示如下:

background Layer 1 f1 fire fire f2 第一次fire 执行 第二次fire 执行 不执行 stopOnFalse每次fire的时候,如果遇到返回false的则停止执行后面的 因为前面返回了 false

这个和其他的不太一样,需要在方法内return false才能停止。

上面的四种模式是可以混合使用的,例如$.Callback('unique memory'),这种则是两种模式的混合。

其他方法

上面讲解了$.Callbacks的一些主要方法和fire规则,现在看一些其他的方法:

fireWith

这个和fire的区别就是它可以自定义上下文,fireWith([context],[arg]),其中第一个参数为上下文,第二个参数为参数,注意参数要用括号括起来:

empty,lock,disable

empty表示清空数组,lock表示锁定数组,disable表示禁用数组。第一个好理解,后两个基本上一调用数组就废了,不能再fire了。

后两者唯一的区别就是在memory的模式下,lock后还可以执行add,但是disable后不行:

其他文章

0
我要评论

评论

返回
×

我要评论

回复:

昵称:(昵称不超过20个字)

图片:

提交
还可以输入500个字