久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

首頁>文檔>Rouse開發文檔>JS Hooks介紹與使用

需要支持?

如果通過文檔沒辦法解決您的問題,請提交工單獲取我們的支持!

JS Hooks介紹與使用

致敬WordPress Hooks,開發了 Javascript 版的鉤子。不依托于任何第三方庫,可獨立運行。

什么是鉤子

鉤子分為?Action?和?Filter?兩種。

  • Action:動作,執行到代碼這個位置時,同時調用其他方法。
  • Filter:過濾器,代碼在這個位置可能需要過濾數據,數據通過參數傳遞給外部方法后返回。

無論WordPress還是Javascript,其目的都是:在代碼正常執行過程中為二次開發預留的接口。從而實現:一定程度上無需修改源代碼而實現二次開發。可以理解為:

  1. 編寫一套通用的工作流。工作流本身的編寫人提前考慮到一些可能的情況。并在考慮到的情況中預埋鉤子。
  2. 接下來,執行人在執行工作流前,預先添加工作流中可能用得到的鉤子,然后再執行工作流。當工作流執行到預埋鉤子的位置時,被添加的方法得到調用。

Action鉤子示例

有下面的工作流:

開始-步驟1-步驟2-步驟3-步驟4-結束

在這個流程中,我們提前考慮到:當步驟2執行完成后,可能有其他的功能需要同時執行
但是我們不知道何時執行完步驟2。因此使用Action鉤子

于是,工作流(源代碼)的編寫人(開發人員)在編寫源代碼時,在步驟2結束的代碼后,預埋了“do_action”鉤子,并告知了執行人(用戶)動作名稱。

最終源代碼發布給執行人(用戶)使用時,就可以通過“add_action”在步驟2執行完成后同時執行工作流以外的聯動方法

Filter過濾器示例

有下面的工作流:

開始-步驟1-步驟2-步驟3-步驟4-結束

在這個流程中,我們提前考慮到:步驟3的?數據可能會被再次處理?后流轉到下一個步驟。
但是我們不知道步驟3的原始數據,也不知道何時執行完步驟3。因此使用Filter鉤子

于是,工作流(源代碼)的編寫人(開發人員)在編寫源代碼時,在步驟3處理完后的數據中,預埋了“apply_filters”鉤子,并告知了執行人(用戶)過濾器名稱。

最終源代碼發布給執行人(用戶)使用時,就可以通過“add_filter”對步驟3的數據進行外部處理后返回,步驟4就能得到外部處理的結果。

類比WordPress鉤子

WordPress鉤子同樣是這個原理。例如:wp的the_content過濾器。在輸出文章數據的時候,如果發現用戶添加過the_content過濾器,就使用用戶過濾返回后的數據,于是輸出的文章內容就是用戶使用鉤子修改的內容了。
當然,用戶在添加這個鉤子的時候,并不知道文章內容是什么,所以也不知道如何修改。因此過濾器接收參數。用戶在過濾的時候就可以根據原始內容就行過濾。然后再返回。

方法名及參數

do_action

do_action(鉤子名稱:String, 參數1, 參數2…)
預埋鉤子,執行“add_action”的動作鉤子,并提供動作的額外參數。

add_action

add_action(鉤子名稱:String, 回調函數:Function, 優先級:Number)
添加鉤子動作,當代碼運行到“do_action”時,聯動同名的操作。聯動的回調參數接收“do_action”傳遞的參數。

  • 默認優先級:10
  • 邏輯上完全相同(===)的同一個鉤子,只會添加一次

例:在下面的工作流中,根據當前時間判斷是早上還是晚上。并調用不同的外部方法

//==========添加可用鉤子============
add_action('in_the_night',function(time){
    console.log("It's " + time + ", I have to sleep.");
});
add_action('in_the_morning',function(time){
    console.log("It's " + time + ", I have to go to school.");
});
//==========正常的代碼工作流============
var date = new Date(),
    hour = date.getHours(),
    minute = date.getHours(),
    time = hour + ":" + minute;
if (hour >= 21 && hour <= 23) {
    console.log('Good night!');
    do_action('in_the_night', time);
}
if (hour >= 6 && hour <= 9) {
    console.log('Good morning!');
    do_action('in_the_morning', time);
}
//==========運行結果===========
// 在6點~9點間,屏幕輸出:
// Good morning!
// It's (當前時間), I have to go to school.
//
// 在21點~23點間,屏幕輸出:
// Good night!
// It's (當前時間), I have to sleep.

apply_filters

過濾結果 = apply_filters(鉤子名稱:String, 被過濾的參數, 額外參數1, 額外參數2…)
預埋過濾器,執行“add_filter”的過濾器,并提供被過濾的數據。
若添加的過濾器有多個,則被過濾的數據為上一個過濾器返回的數據。

add_filter

add_filter(鉤子名稱:String, 回調函數:Function, 優先級:Number)

添加鉤子過濾器,當代碼運行到“apply_filters”時,運行回調函數,在函數中并返回過濾后的參數。

  • 必須返回參數,原則上返回的過濾后的參數應該與被過濾的參數類型、結構相同
  • 默認優先級:10
  • 邏輯上完全相同(===)的同一個鉤子,只會添加一次

例:有一個students的數組中包含每個學生的姓名、年齡、和自我介紹。讀取自我介紹時進行過濾:當學生沒有自我介紹時,自動根據名字和年齡生成自我介紹。

//==========添加可用鉤子============
add_action('introduce_oneself',function(introduce_original, name, age){
    if (introduce_original == "") {
        //沒有自我介紹,自動根據額外的參數(姓名和年齡)自動生成
        return "My name is " + name + ", I am " + age + " years old.";
    } else {
        //有自我介紹,不作處理,直接返回
        return introduce_original;
    }
});
//==========正常的代碼工作流============
var students = [
    {
        name: "Mary",
        age: 12,
        introduce: ""
    },
    {
        name: "Bob",
        age: 13,
        introduce: "I'm Bob, I like football."
    }
];
//輸出自我介紹
for (var i = 0; i < students.length; i++) {
    // 執行過濾器,給過濾器傳入被過濾的參數(introduce)、額外參數(name,age)
    var introduce_filtered = apply_filters("introduce_oneself", students[i].introduce, students[i].name, students[i].age);
    console.log(introduce_filtered);
}
//==========運行結果===========
// 屏幕輸出:
// My name is Mary, I am 12 years old.
// I'm Bob, I like football.

remove_action / remove_filter

remove_action(鉤子名稱:String, 回調函數:Function)
remove_filter(鉤子名稱:String, 回調函數:Function)

只有Function完全相同(===)時,才會被移除。與WordPress的PHP鉤子不同的是,無需提供優先級即可移除。

例:

//==========添加可用鉤子============
// Take some apple.
function take_apple(original_apple) {
    return original_apple - 3;
}
add_filter('count_apple',take_apple);
// Put them back
remove_filter('count_apple',take_apple);
//==========正常的代碼工作流============
var original_apple = 5;
var new_apple = apply_filters("count_apple", original_apple);
console.log("There are " + new_apple + " apples.");
0 條回復 A文章作者 M管理員
    暫無討論,說說你的看法吧
?
購物車
優惠劵
搜索
久久精品国产99国产精品免费看_中文成人在线_日本在线播放视频_精品国产一区二区三区在线观看

    午夜亚洲伦理| 欧美亚洲免费电影| 国产精品成人观看视频国产奇米| av不卡在线观看| 国产伦精品一区二区三区高清| 久久精品视频一| 91久久精品视频| 欧美日精品一区视频| 午夜精品三级视频福利| 在线欧美日韩国产| 国产精品激情| 久久久久久久性| 在线亚洲观看| 雨宫琴音一区二区在线| 欧美日韩国产大片| 久久精品人人做人人爽电影蜜月| 亚洲国产精品激情在线观看| 国产精品久久久久三级| 蜜桃精品久久久久久久免费影院| 亚洲最新在线视频| 亚洲成人自拍视频| 国产精品美女视频网站| 免播放器亚洲一区| 欧美一区2区三区4区公司二百 | 另类激情亚洲| 亚洲一区欧美二区| 亚洲高清不卡| 国产亚洲va综合人人澡精品| 欧美交受高潮1| 久久综合九色综合欧美就去吻| 一区二区日韩精品| 亚洲福利电影| 国模精品一区二区三区| 国产精品成人免费| 欧美片网站免费| 欧美a级一区| 久久久www成人免费毛片麻豆| 在线一区视频| 99视频精品在线| 亚洲福利视频网站| 黑人中文字幕一区二区三区| 国产精品自在欧美一区| 国产精品成人一区二区三区夜夜夜 | 国产女人18毛片水18精品| 欧美久久婷婷综合色| 乱中年女人伦av一区二区| 欧美与欧洲交xxxx免费观看| 亚洲私人影院| 99精品热视频| 99国产精品久久久久久久成人热| 亚洲第一精品福利| 一区二区亚洲| 一区二区在线视频播放| 国内精品嫩模av私拍在线观看| 国产精品久久波多野结衣| 欧美日韩精品一区二区三区四区 | 欧美黑人在线观看| 欧美大片免费久久精品三p | 欧美va亚洲va国产综合| 美女精品在线观看| 免费亚洲电影在线观看| 欧美va亚洲va国产综合| 欧美韩日亚洲| 欧美日韩免费一区二区三区| 欧美日韩国产电影| 国产精品v欧美精品v日韩精品 | 黄色成人91| 永久免费毛片在线播放不卡| 激情成人综合| 国产日韩欧美二区| 国产资源精品在线观看| 激情成人综合| 亚洲精品美女久久久久| 日韩午夜精品视频| 亚洲图片在线| 久久本道综合色狠狠五月| 久久久夜夜夜| 欧美高清在线播放| 欧美日韩亚洲一区二区三区四区| 欧美天天综合网| 国产日韩精品一区二区| 伊人成年综合电影网| 亚洲精品在线免费观看视频| 一区二区久久久久| 性欧美长视频| 欧美aⅴ一区二区三区视频| 欧美日韩国产在线观看| 国产精品麻豆欧美日韩ww| 国产欧美大片| 亚洲精品美女在线观看| 亚洲欧美国产精品va在线观看| 久久国产综合精品| 欧美国产精品| 国产精品美女www爽爽爽| 国产亚洲在线| 99视频精品全国免费| 欧美一区免费视频| 欧美激情四色 | 黄色成人av网站| 99精品热视频只有精品10| 午夜在线a亚洲v天堂网2018| 麻豆9191精品国产| 国产精品高潮呻吟| 亚洲国产精品久久久久秋霞不卡| 亚洲深爱激情| 老司机成人在线视频| 国产精品高潮粉嫩av| 亚洲国产精品国自产拍av秋霞| 在线亚洲一区二区| 蜜桃精品一区二区三区| 国产精品日韩欧美综合| 最新中文字幕亚洲| 久久精品国产99| 国产精品捆绑调教| 亚洲美女在线视频| 久久久天天操| 国产日本精品| 亚洲无线一线二线三线区别av| 久久婷婷蜜乳一本欲蜜臀| 国产精品成人aaaaa网站| 亚洲人妖在线| 久久综合网络一区二区| 国产视频综合在线| 在线一区观看| 欧美日韩成人一区| 亚洲国产高清在线观看视频| 久久se精品一区精品二区| 欧美日韩综合久久| 亚洲精品在线视频| 欧美成人免费全部| 在线观看av一区| 欧美一区二区三区免费视频| 国产精品va在线| 一级日韩一区在线观看| 欧美激情在线有限公司| 亚洲国产成人久久综合一区| 久久精品国产成人| 国产一区91| 欧美在线关看| 国产日韩视频| 欧美淫片网站| 国产一区二区精品丝袜| 性视频1819p久久| 国产酒店精品激情| 欧美亚洲免费电影| 国产精品一二三四区| 一本大道久久精品懂色aⅴ| 欧美成人中文| 亚洲国产精品一区二区久| 久久另类ts人妖一区二区| 国产一区在线观看视频| 久久久久久久一区二区三区| 国产一区二区三区在线观看免费视频| 亚洲综合视频1区| 国产伦精品一区二区三区视频黑人| 亚洲午夜久久久久久久久电影院| 欧美日韩视频在线| 亚洲小视频在线| 国产日产欧美a一级在线| 久久国产精品网站| 尤物在线观看一区| 欧美成人午夜77777| 日韩午夜精品视频| 欧美色视频在线| 午夜国产精品视频| 韩日视频一区| 欧美激情自拍| 亚洲主播在线| 国外视频精品毛片| 欧美第一黄色网| 亚洲午夜性刺激影院| 国产欧美一区二区三区在线看蜜臀| 欧美在线观看视频一区二区三区| 国内在线观看一区二区三区| 欧美区国产区| 亚洲欧美另类久久久精品2019| 国产欧美一区二区三区国产幕精品 | 久久三级视频| 99精品久久久| 国产午夜一区二区三区| 蜜乳av另类精品一区二区| 99精品视频一区| 国产区日韩欧美| 免费欧美电影| 亚洲欧美bt| 亚洲国产91色在线| 国产精品www| 久久女同互慰一区二区三区| 日韩一级免费观看| 国内自拍一区| 欧美日韩一二三区| 久久久xxx| 中文精品视频| 亚洲电影自拍| 国产精品久久久久久av福利软件 | 国产精品一区三区| 欧美好骚综合网| 久久精品国产亚洲一区二区三区| 亚洲久久一区| 一区二区亚洲|