⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 observable.js

📁 当前比较流行的,漂亮的JS框架,这里面用到的API文档
💻 JS
📖 第 1 页 / 共 2 页
字号:
            var returnValue, v, cancel;            var obj = this;            var makeCall = function(fn, scope, args){                if((v = fn.apply(scope || obj, args)) !== undefined){                    if(typeof v === 'object'){                        if(v.returnValue !== undefined){                            returnValue = v.returnValue;                        }else{                            returnValue = v;                        }                        if(v.cancel === true){                            cancel = true;                        }                    }else if(v === false){                        cancel = true;                    }else {                        returnValue = v;                    }                }            }            this[method] = function(){                returnValue = v = undefined; cancel = false;                var args = Array.prototype.slice.call(arguments, 0);                for(var i = 0, len = e.before.length; i < len; i++){                    makeCall(e.before[i].fn, e.before[i].scope, args);                    if(cancel){                        return returnValue;                    }                }                if((v = e.originalFn.apply(obj, args)) !== undefined){                    returnValue = v;                }                for(var i = 0, len = e.after.length; i < len; i++){                    makeCall(e.after[i].fn, e.after[i].scope, args);                    if(cancel){                        return returnValue;                    }                }                return returnValue;            };        }        return e;    },    // adds an "interceptor" called before the original method    beforeMethod : function(method, fn, scope){        var e = this.getMethodEvent(method);        e.before.push({fn: fn, scope: scope});    },    // adds a "sequence" called after the original method    afterMethod : function(method, fn, scope){        var e = this.getMethodEvent(method);        e.after.push({fn: fn, scope: scope});    },    removeMethodListener : function(method, fn, scope){        var e = this.getMethodEvent(method);        for(var i = 0, len = e.before.length; i < len; i++){            if(e.before[i].fn == fn && e.before[i].scope == scope){                e.before.splice(i, 1);                return;            }        }        for(var i = 0, len = e.after.length; i < len; i++){            if(e.after[i].fn == fn && e.after[i].scope == scope){                e.after.splice(i, 1);                return;            }        }    }};/** * 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){            scope = scope || this.obj;            if(!this.isListening(fn, scope)){                var l = this.createListener(fn, scope, options);                if(!this.firing){                    this.listeners.push(l);                }else{ // if we are currently firing this event, don't disturb the listener loop                    this.listeners = this.listeners.slice(0);                    this.listeners.push(l);                }            }        },        createListener : function(fn, scope, o){            o = o || {};            scope = scope || this.obj;            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;            return 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 + -