標籤:jquer node 介面 length sub 改變 ret 自訂 處理
分布式事件
發布/訂閱模式分發事件
?PubSub模式
瀏覽器允許向DOM元素附加事件處理器;
Node的EventEmitter對象
emitter.on(‘evacuate’, function() {…});
emitter.emit(‘evacuate’);
emit意為觸發,負責調用給定事件類型的所有處理器
建立自己的PubSub
PubSub.on = function(eventType, handler) {
if(!(eventType in this.handlers)) {
this.handlers[eventType] = handler;
return this;
}
};
PubSub.emit = function(eventType) {
var handlerArgs = Array.prototype.slice.call(arguments, 1);
for(var i =0; i < this.handlers[eventType].length; i++) {
this.handlers[eventType][i].apply(this, handlerArgs);
}
return this;
};
jQuery的名稱空間化事件
如果同時綁定了名稱為click.tbb和hover.tbb兩個事件,簡單地調用unbind(‘.tbb’)就可以同時解除綁定它們。
jQuery還支援用空格隔開多個事件來同時綁定或觸發多種事件類型。
同步性
PubSub模式是一項處理非同步事件的重要技術,但內在跟非同步沒有任何關係。
PubSub模式簡化了事件的命名、分發和堆積。
?事件化模型
只要對象帶有PubSub介面,就可以稱之為事件化對象。
特殊情況出現在用於儲存資料的對象因內容變化而發布事件是,這裡用於儲存資料的對象又稱作模型。
老式的JavaScript依靠輸入事件的處理器直接改變DOM。
新式的JavaScript先改變模型,接著由模型觸發事件而導致DOM的更新。
jQuery自訂事件
在jQuery中,可以使用trigger方法基於任意DOM元素觸發任何想要的事件,
冒泡技術:只要某個DOM元素觸發了某個事件,其父元素就會接著觸發這個事件,接著是父元素的父元素,以此類推,一直上溯到根項目。
只有在冒泡過程中呼叫事件的stopPropagation方法才會停止。
PubSub的缺陷在於不適用於一次性事件,一次性事件要求對非同步函數執行的一次性任務的兩種結果(任務成功或失敗)做不同處理。例如,Ajax請求。而用於解決一次性事件問題的工具叫做Promise。
JavaScript非同步編程(二) 分布式事件