首先讓我們來看看jQuery的自定義綁定的使用方法,你可以使用bind或者live來訂閱一個事件(當然1.7以后也可以使用on了),代碼如下:
$("#myElement").bind('customEventName',function(e){ ... }); $(".elementsClass").live('customEventName',function(e){ ... });
然后通過如下方式來觸發事件:
$("#myelement").trigger('customEventName');
或者你也可以為自定義事件增加額外的參數,樣例如下:
$("#myelement").bind('customEventName',function(e,data){ if(data.custom) ... }); $("#myelement").trigger('customEventName',{ custom: false });
所謂魔法升級,其實是想讓整個程序所有的自定義事件能夠自動注冊并綁定jQuery上,然后執行的時候,所有注冊該事件的模塊都會執行。比如模塊User.js里定義的UserUpdate方法和Blogs.js里定義的BlogUpdate方法都定義了在發布一篇博客的時候需要執行的function函數,整個時候我們可以通過注冊統一的事件名稱(例如BlogAdded)bind到jQuery指定的一個容器上(例如document)上,然后發布博客成功以后,執行$(document).trigger(“BlodAdded”)就OK了。
下面我們給個通用的樣例代碼:
var components = [User, Blog, Group, Friend, Topic, Photo]; var eventTypes = ["AddComplete", "UpdateComplete", "DeleteComplete", "LockComplete", "UnLockComplete"]; $.each(components, function(i,component) { $.each(eventTypes, function(i,eventType) { var handler = component[eventType]; if (handler) $(document).bind(eventType, handler); }); })
然后每個js模塊定義的代碼安裝如下格式:
User= { AddComplete: function(e, data) { //... }, UpdateComplete: function(e, data) { //... } }
這樣,不管在任何地方,如果我們需要的話,就可以使用jQuery的方式來觸發我們的事件了:
$(document).trigger("UpdateComplete", data);
通過這種方法,大家可以發現一個模塊的method只能注冊一個事件,那如果我們通過一個方法來注冊多個事件觸發的話,可以使用如下方式:
var blogController = { blogAddOrUpdateComplete: function() { //... } } blogController.blogAddComplete = blogController.blogUpdateComplete = blogController.blogAddOrUpdateComplete;
最后注意:本文只是展示一個簡單的例子,不要混用不同module同一事件名稱的用法哦,比如,User.js里的AddComplete和Blog.js里的AddComplete可能根本就沒有關系,也就是說只處理自己相應的邏輯,這時候,就不應該統一處理這個事件,但如果要檢測的東西是一樣的話,就可以使用,比如DisableUserComplete,就可以通用,因為User模塊需要處理禁用賬戶以后的操作,Blog模塊可能也需要處理禁用賬戶以后的操作。
大叔手記:旨在記錄日常工作中的各種小技巧與資料(包括但不限于技術),如對你有用,請推薦一把,給大叔寫作的動力
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com