1. 程式人生 > >jQuery: Callbacks

jQuery: Callbacks

參數 直接 value 並且 efi 存在 .com mem bsp

jQuery 中提供了一個Callback的工具類Callbacks,它提供了一個Callback Chain。使用它可以在一個chain上來執行相關操作。它也是jQuery中的ajax, Deferred的基礎。我們也可以使用它來構建需要異步執行的組件等。

Callbacks API說明

構造器

jQuery.Callbacks(flags) 創建Callbacks對象。

Callbacks對象裏包含了一個callback function的數組(也稱為 callback chain)。

method說明

add(function|functions) : 將一個或多個

funcation作為一個callback function 添加到callback chain中。

remove(function|functions) :從callback chain中移除指定的callback function

fire(arguments):觸發callback chain在執行chain中的每一個callbakc function時,參數都是一樣的。

fireWith(context,arguments): context下執行callback chain

disable(): 禁用Callbacks。其實是將chain設置為undefined。所以在禁用後,

add()是添加不成功的,那麽fire時也就不會有什麽操作了。

empty():只是將chain內容清空。

構造器參數

flags:

·unique chain中的funcation是不能重復的。如果重復添加時,是添加不了的。生效於添加階段(也就是在add函數中使用)。

·once 是整個鏈中的每一個callback function都要被執行一次,並且只執行一次。

·memory 保留上一次fire時的參數,並記錄上一次fire時執行到第ncallback function。在下一次fire時,先將上一次未執行的(包括上一次之後,又新加的

callback)執行完畢,然後才開啟新一輪執行。

·stopOnFalse 執行一個callback時判斷執行結果是否為false,如果是false的話就停止不在執行。

重要流程

Add一個函數的流程

1)如果有unique標誌,判斷要添加的是否存在,只在不存在時添加到chain中。

2)如果沒有unique標誌,代表可以重復。直接添加到chain中。

Fire的流程:

1)設置context

如果沒有指定context,那麽context值是 Callbacks對象。

2)chain中未執行的functions執行一遍。在此過程中,每執行完一個就會基於stopOnFalse來進行判斷(如果設置的話)

3)後置處理

  如果Callbacks可以多次執行:

  如果還有沒有執行的參數,再次執行。

  否則:(只能執行一次)

    如果被stopOnFalse了,執行disable()

  否則:執行empty

Demo

<script src="https://code.jquery.com/jquery-1.7.2.js" integrity="sha256-FxfqH96M63WENBok78hchTCDxmChGFlo+/lFIPcZPeI=" crossorigin="anonymous"></script>

<script type="text/javascript">

$(function(){

function fn1(value){

console.log(arguments.length,value);

}

function fn2(value){

return "fn2, " + value;

}

function fn3(value){

fn1(fn2(value));

}

debugger;

var callbacks = jQuery.Callbacks("once memory");

callbacks.add(fn1,fn2,fn3);

callbacks.fire("hello_0")

console.log("--------1-------")

callbacks.add([fn1,fn3]);

callbacks.add(fn2);

callbacks.add(fn3);

callbacks.fire("hello_1");

});

</script>

jQuery: Callbacks