[UPDATE] Famo.us 官方已捨棄此模組,詳情請看官方 Github [https://github.com/famous/engine]
EventHandler, EventEmitter 這兩項核心很常出現在其他的模組當中,主要是負責事件控制、監聽與觸發,但是他跟 DOM
就沒有關係,單純的是綁在模組或是元件上面。
--------------------------------------------------------------------------------
EventEmitter 核心
是 EventHandler 核心所依賴的核心(沒有之一,用於將事件往下擴散(或是將其子元件事件綁定在自己身上。
方法
* emit(type, event)
在改寫自己的 Plugin 的時候出現了一個問題,由於 Event 在 Plugin 中宣告之後,如果重新再次綁定 Plugin
的時候,那麼裡面的 Event 有可能會被重新再綁定一次(等於重複註冊)。所以,後來你就會發現,你的所綁定的物件怎麼不太一樣了。
這時候可以用 Namespace 來解決這件事情。
> $("div.myClick").bind("click.myClick", function(event) { ... });
在一般的 Event 中用點相連的就是我們自己所指定的 Namespace,用以區別一般的
UPDATE, 還是認真說明一下好了(笑)
委派事件(delegate)跟 live 事件其實是指同一件事情,不過有幾個地方不同:
1. 由於 live 事件直接綁定在 document 上,所以一旦有中途有事件傳播被取消(stopPropagation),該 live 事件就不會被觸發。
* 委派事件(delegate)同樣使用 live 事件的綁定方式,不同的是,他的事件傳播會依序傳回直到被中斷為止。
請看以下範例:
* http://jsfiddle.net/hinablue/KFkGZ/
UPDATE, 簡易的 plugin,為了強姦干擾 Events 執行順序而做的。
噗浪討論串:http://www.plurk.com/p/7u9br0
(function($) {
$.fn.superbind = function(order, type, data, fn) {
if ( $.isFunction( data ) ) {
fn = data;
data = undefined;
}
var order = (typeof order !== "number"