亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? observable.js

?? ext js demo ext學習資料
?? JS
字號:
/*
 * Ext JS Library 1.1 RC 1
 * Copyright(c) 2006-2007, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://www.extjs.com/license
 */

/** * @class Ext.util.Observable * Abstract base class that provides a common interface for publishing events. Subclasses are expected to * to have a property "events" with all the events defined.<br> * For example: * <pre><code> Employee = function(name){    this.name = name;    this.addEvents({        "fired" : true,        "quit" : true    }); } Ext.extend(Employee, Ext.util.Observable);</code></pre> */Ext.util.Observable = function(){    if(this.listeners){        this.on(this.listeners);        delete this.listeners;    }};Ext.util.Observable.prototype = {    /**     * Fires the specified event with the passed parameters (minus the event name).     * @param {String} eventName     * @param {Object...} args Variable number of parameters are passed to handlers     * @return {Boolean} returns false if any of the handlers return false otherwise it returns true     */    fireEvent : function(){        var ce = this.events[arguments[0].toLowerCase()];        if(typeof ce == "object"){            return ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));        }else{            return true;        }    },    // private    filterOptRe : /^(?:scope|delay|buffer|single)$/,    /**     * Appends an event handler to this component     * @param {String}   eventName The type of event to listen for     * @param {Function} handler The method the event invokes     * @param {Object}   scope (optional) The scope in which to execute the handler     * function. The handler function's "this" context.     * @param {Object}   options (optional) An object containing handler configuration     * properties. This may contain any of the following properties:<ul>     * <li>scope {Object} The scope in which to execute the handler function. The handler function's "this" context.</li>     * <li>delay {Number} The number of milliseconds to delay the invocation of the handler after te event fires.</li>     * <li>single {Boolean} True to add a handler to handle just the next firing of the event, and then remove itself.</li>     * <li>buffer {Number} Causes the handler to be scheduled to run in an {@link Ext.util.DelayedTask} delayed     * by the specified number of milliseconds. If the event fires again within that time, the original     * handler is <em>not</em> invoked, but the new handler is scheduled in its place.</li>     * </ul><br>     * <p>     * <b>Combining Options</b><br>     * Using the options argument, it is possible to combine different types of listeners:<br>     * <br>     * A normalized, delayed, one-time listener that auto stops the event and passes a custom argument (forumId)		<pre><code>		el.on('click', this.onClick, this, { 			single: true,    		delay: 100,    		forumId: 4		});		</code></pre>     * <p>     * <b>Attaching multiple handlers in 1 call</b><br>     * The method also allows for a single argument to be passed which is a config object containing properties     * which specify multiple handlers.     * <pre><code>		el.on({			'click': {        		fn: this.onClick,        		scope: this,        		delay: 100    		},     		'mouseover': {        		fn: this.onMouseOver,        		scope: this    		},    		'mouseout': {        		fn: this.onMouseOut,        		scope: this    		}		});		</code></pre>     * <p>     * Or a shorthand syntax which passes the same scope object to all handlers:     	<pre><code>		el.on({			'click': this.onClick,    		'mouseover': this.onMouseOver,    		'mouseout': this.onMouseOut,    		scope: this		});		</code></pre>     */    addListener : function(eventName, fn, scope, o){        if(typeof eventName == "object"){            o = eventName;            for(var e in o){                if(this.filterOptRe.test(e)){                    continue;                }                if(typeof o[e] == "function"){                    // shared options                    this.addListener(e, o[e], o.scope,  o);                }else{                    // individual options                    this.addListener(e, o[e].fn, o[e].scope, o[e]);                }            }            return;        }        o = (!o || typeof o == "boolean") ? {} : o;        eventName = eventName.toLowerCase();        var ce = this.events[eventName] || true;        if(typeof ce == "boolean"){            ce = new Ext.util.Event(this, eventName);            this.events[eventName] = ce;        }        ce.addListener(fn, scope, o);    },    /**     * Removes a listener     * @param {String}   eventName     The type of event to listen for     * @param {Function} handler        The handler to remove     * @param {Object}   scope  (optional) The scope (this object) for the handler     */    removeListener : function(eventName, fn, scope){        var ce = this.events[eventName.toLowerCase()];        if(typeof ce == "object"){            ce.removeListener(fn, scope);        }    },    /**     * Removes all listeners for this object     */    purgeListeners : function(){        for(var evt in this.events){            if(typeof this.events[evt] == "object"){                 this.events[evt].clearListeners();            }        }    },    relayEvents : function(o, events){        var createHandler = function(ename){            return function(){                return this.fireEvent.apply(this, Ext.combine(ename, Array.prototype.slice.call(arguments, 0)));            };        };        for(var i = 0, len = events.length; i < len; i++){            var ename = events[i];            if(!this.events[ename]){ this.events[ename] = true; };            o.on(ename, createHandler(ename), this);        }    },    /**     * Used to define events on this Observable     * @param {Object} object The object with the events defined     */    addEvents : function(o){        if(!this.events){            this.events = {};        }        Ext.applyIf(this.events, o);    },    /**     * Checks to see if this object has any listeners for a specified event     * @param {String} eventName The name of the event to check for     * @return {Boolean} True if the event is being listened for, else false     */    hasListener : function(eventName){        var e = this.events[eventName];        return typeof e == "object" && e.listeners.length > 0;    }};/** * Appends an event handler to this element (shorthand for addListener) * @param {String}   eventName     The type of event to listen for * @param {Function} handler        The method the event invokes * @param {Object}   scope (optional) The scope in which to execute the handler * function. The handler function's "this" context. * @param {Object}   options  (optional) * @method */Ext.util.Observable.prototype.on = Ext.util.Observable.prototype.addListener;/** * Removes a listener (shorthand for removeListener) * @param {String}   eventName     The type of event to listen for * @param {Function} handler        The handler to remove * @param {Object}   scope  (optional) The scope (this object) for the handler * @method */Ext.util.Observable.prototype.un = Ext.util.Observable.prototype.removeListener;/** * Starts capture on the specified Observable. All events will be passed * to the supplied function with the event name + standard signature of the event * <b>before</b> the event is fired. If the supplied function returns false, * the event will not fire. * @param {Observable} o The Observable to capture * @param {Function} fn The function to call * @param {Object} scope (optional) The scope (this object) for the fn * @static */Ext.util.Observable.capture = function(o, fn, scope){    o.fireEvent = o.fireEvent.createInterceptor(fn, scope);};/** * Removes <b>all</b> added captures from the Observable. * @param {Observable} o The Observable to release * @static */Ext.util.Observable.releaseCapture = function(o){    o.fireEvent = Ext.util.Observable.prototype.fireEvent;};(function(){    var createBuffered = function(h, o, scope){        var task = new Ext.util.DelayedTask();        return function(){            task.delay(o.buffer, h, scope, Array.prototype.slice.call(arguments, 0));        };    };    var createSingle = function(h, e, fn, scope){        return function(){            e.removeListener(fn, scope);            return h.apply(scope, arguments);        };    };    var createDelayed = function(h, o, scope){        return function(){            var args = Array.prototype.slice.call(arguments, 0);            setTimeout(function(){                h.apply(scope, args);            }, o.delay || 10);        };    };    Ext.util.Event = function(obj, name){        this.name = name;        this.obj = obj;        this.listeners = [];    };    Ext.util.Event.prototype = {        addListener : function(fn, scope, options){            var o = options || {};            scope = scope || this.obj;            if(!this.isListening(fn, scope)){                var l = {fn: fn, scope: scope, options: o};                var h = fn;                if(o.delay){                    h = createDelayed(h, o, scope);                }                if(o.single){                    h = createSingle(h, this, fn, scope);                }                if(o.buffer){                    h = createBuffered(h, o, scope);                }                l.fireFn = h;                if(!this.firing){ // if we are currently firing this event, don't disturb the listener loop                    this.listeners.push(l);                }else{                    this.listeners = this.listeners.slice(0);                    this.listeners.push(l);                }            }        },        findListener : function(fn, scope){            scope = scope || this.obj;            var ls = this.listeners;            for(var i = 0, len = ls.length; i < len; i++){                var l = ls[i];                if(l.fn == fn && l.scope == scope){                    return i;                }            }            return -1;        },        isListening : function(fn, scope){            return this.findListener(fn, scope) != -1;        },        removeListener : function(fn, scope){            var index;            if((index = this.findListener(fn, scope)) != -1){                if(!this.firing){                    this.listeners.splice(index, 1);                }else{                    this.listeners = this.listeners.slice(0);                    this.listeners.splice(index, 1);                }                return true;            }            return false;        },        clearListeners : function(){            this.listeners = [];        },        fire : function(){            var ls = this.listeners, scope, len = ls.length;            if(len > 0){                this.firing = true;                var args = Array.prototype.slice.call(arguments, 0);                for(var i = 0; i < len; i++){                    var l = ls[i];                    if(l.fireFn.apply(l.scope||this.obj||window, arguments) === false){                        this.firing = false;                        return false;                    }                }                this.firing = false;            }            return true;        }    };})();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美色综合| 亚洲综合一区二区三区| 亚洲精品日韩一| 韩国欧美国产一区| 欧美亚洲精品一区| 亚洲欧洲国产日本综合| 国产一区不卡精品| 在线电影院国产精品| 亚洲精品乱码久久久久久黑人| 六月婷婷色综合| 欧美一区二区视频在线观看2022| 18成人在线观看| 成人h版在线观看| 久久久综合视频| 美日韩黄色大片| 欧美色区777第一页| 国产精品成人一区二区艾草| 国产综合色视频| 日韩一级片网址| 男男视频亚洲欧美| 欧美日本一道本在线视频| 亚洲少妇最新在线视频| 成人h精品动漫一区二区三区| 国产午夜亚洲精品羞羞网站| 九色porny丨国产精品| 日韩欧美一级在线播放| 丝袜亚洲另类丝袜在线| 欧美日韩成人在线| 丝袜亚洲另类欧美综合| 欧美一区二区三区在线观看| 亚洲va国产va欧美va观看| 欧美视频完全免费看| 亚洲最新在线观看| 91激情五月电影| 亚洲123区在线观看| 欧美精品三级在线观看| 午夜av电影一区| 欧美一二三四在线| 久久成人免费电影| 久久婷婷色综合| 高潮精品一区videoshd| 国产精品色一区二区三区| 成人av电影观看| 亚洲一区自拍偷拍| 欧美精品丝袜久久久中文字幕| 五月激情六月综合| 欧美一级一区二区| 国产在线精品一区二区| 日本一区二区三区dvd视频在线| 97se亚洲国产综合自在线不卡| 亚洲免费在线观看视频| 欧美日韩中字一区| 麻豆精品视频在线观看免费 | 免费一级欧美片在线观看| 欧美日韩国产乱码电影| 美女视频黄频大全不卡视频在线播放| 日韩精品一区二区三区蜜臀| 国产精品一区二区久久精品爱涩| 久久精品人人做| 91污在线观看| 免费在线成人网| 中文无字幕一区二区三区 | 激情小说欧美图片| 中文字幕欧美区| 欧美精品一级二级| 成人不卡免费av| 美日韩一级片在线观看| 亚洲人吸女人奶水| 日韩一区二区三区电影| 日本中文字幕一区二区有限公司| 蜜臀av国产精品久久久久 | 性感美女极品91精品| 欧美一区二区三区免费大片| 国产麻豆91精品| 亚洲国产精品精华液网站| 日韩一区二区在线观看视频| 东方欧美亚洲色图在线| 亚洲chinese男男1069| 久久久99久久| 91.com视频| 色老汉一区二区三区| 看片的网站亚洲| 亚洲精品国产a久久久久久| 欧美精品一区二| 欧美性大战久久久| 国产成人在线色| 麻豆精品视频在线观看视频| 亚洲欧美另类在线| 国产欧美一区二区精品秋霞影院| 在线成人av影院| 在线免费av一区| 岛国精品一区二区| 精品在线免费视频| 三级一区在线视频先锋| **欧美大码日韩| 久久久久久夜精品精品免费| 6080午夜不卡| 色菇凉天天综合网| 不卡高清视频专区| 国产传媒欧美日韩成人| 久久国产精品72免费观看| 亚洲一区在线观看视频| 亚洲青青青在线视频| 国产精品亲子伦对白| 国产欧美综合色| 亚洲精品一区二区三区99| 欧美一区二区视频在线观看2022| 欧美亚洲精品一区| 91久久精品一区二区三区| av影院午夜一区| 不卡影院免费观看| 成人av网站在线观看免费| 国产成人一级电影| 国产成人一级电影| 成人性视频网站| 高清在线不卡av| 国产91对白在线观看九色| 成人18视频在线播放| 懂色av中文字幕一区二区三区 | 日韩中文欧美在线| 亚洲成人动漫在线观看| 亚洲va在线va天堂| 日韩极品在线观看| 久久国产综合精品| 久久99精品视频| 国模少妇一区二区三区| 国产一区二区三区久久悠悠色av| 国产精品一区二区不卡| 成人黄色777网| 91女神在线视频| 欧美在线一二三四区| 欧美精品一二三四| 欧美xxxxx牲另类人与| 欧美精品一区二区三区蜜桃视频| 精品免费视频一区二区| 国产亚洲综合av| 一区二区三区在线影院| 亚洲精品写真福利| 精品一区二区三区免费| 国产精品99久久久久久久vr| 95精品视频在线| 欧美视频在线一区| 2023国产精品视频| 亚洲欧洲日韩av| 偷拍日韩校园综合在线| 国产精选一区二区三区| 在线视频一区二区三区| 欧美大片拔萝卜| 国产精品久久综合| 视频在线观看91| 国产99精品视频| 欧美日韩中字一区| 久久久久久久久97黄色工厂| 亚洲欧美一区二区视频| 日韩avvvv在线播放| 成人午夜精品在线| 欧美另类久久久品| 国产欧美一区视频| 日韩精品乱码av一区二区| 懂色av一区二区三区免费观看| 欧美色图片你懂的| 久久精品视频一区二区三区| 亚洲国产cao| 成人a区在线观看| 日韩色视频在线观看| 亚洲视频免费在线观看| 激情欧美日韩一区二区| 欧美午夜在线一二页| 国产欧美日韩综合| 日韩专区一卡二卡| 91同城在线观看| 久久久久国产精品人| 日本特黄久久久高潮| 色综合久久久久久久久久久| 精品国产乱子伦一区| 亚洲一区二区在线观看视频 | 狠狠色综合播放一区二区| 一本一道久久a久久精品| 国产亚洲一区二区三区| 五月婷婷激情综合网| 99精品视频在线观看| 久久精品夜色噜噜亚洲aⅴ| 麻豆高清免费国产一区| 欧美三级韩国三级日本三斤| 国产精品天美传媒沈樵| 国产综合久久久久久鬼色| 欧美一区二区三区人| 亚洲图片欧美一区| 色欧美片视频在线观看| 国产亚洲一区字幕| 国产成人午夜片在线观看高清观看| 91精品国产综合久久香蕉麻豆| 有码一区二区三区| 91视频国产资源| 最新欧美精品一区二区三区| 成人一级黄色片| 国产精品私人影院| a美女胸又www黄视频久久| 中文字幕第一区二区| 国产a久久麻豆|