Ext下的方法

addBehaviors:批量添加事件css

Ext.addBehaviors({
    // 在id爲foo的元素中的全部錨點上添加一個單擊事件的偵聽器
    '#foo a@click' : function(e, t){
        // 作一些事情
    },

    // 把相同的監聽器添加到多個選擇符上(在@符號前使用逗號分隔)
    '#foo a, #bar span.some-class@mouseover' : function(){
        // 作一些事情
    }
});
        addBehaviors: function(o){
            //初始化前處理
            if(!Ext.isReady){
                Ext.onReady(function(){
                    Ext.addBehaviors(o);
                });
            } else {
                var cache = {}, 
                    parts,//命令分析結果[]
                    b,//命令
                    s;//選擇器
                for (b in o) {
                    //選擇器@事件
                    if ((parts = b.split('@'))[1]) { 
                        s = parts[0];
                        if(!cache[s]){
                            cache[s] = Ext.fly(document).select(s, true);
                        }
                        //初始化參數
                        cache[s].on(parts[1], o[b]);
                    }
                }
                cache = null;
            }
        }

application:Ext.app.application的快捷方式html

Ext.application({
    name: 'MyApp',
    launch: function() {
        Ext.create('Ext.container.Viewport', {
            items: {
                html: 'My App'
            }
        });
    }
});
Ext.application = function(config) {
    //建立應用
    var createApp = function (App) {
            Ext.onReady(function() {
                Ext.app.Application.instance = new App();
            });
        },
        paths = config.paths,
        ns;

    if (typeof config === "string") {
        //字符串代理
        Ext.require(config, function() {
            createApp(Ext.ClassManager.get(config));
        });
    }
    else {
        //config配置
        config = Ext.apply({
            extend: 'Ext.app.Application' 
        }, config);
        
        Ext.Loader.setPath(config.name, config.appFolder || 'app');
        //依賴關係
        if (paths) {
            for (ns in paths) {
                if (paths.hasOwnProperty(ns)) {
                    Ext.Loader.setPath(ns, paths[ns]);
                }
            }
        }

        config['paths processed'] = true;

        //配置後加載對象
        Ext.define(config.name + ".$application", config,
            function () {
                createApp(this);
            });
    }
};

apply:經常使用於覆蓋,約等於$.extendjson

Ext.apply({a:1},{b:2});//{a:1,b:2}
    Ext.apply = function(object, config, defaults) {
        if (defaults) {
            //嵌套
            Ext.apply(object, defaults);
        }

        if (object && config && typeof config === 'object') {
            var i, j, k;
            //淺拷貝
            for (i in config) {
                object[i] = config[i];
            }

            //['valueOf', 'toLocaleString', 'toString', 'constructor']枚舉對蝦|null,低版本複製
            if (enumerables) {
                for (j = enumerables.length; j--;) {
                    k = enumerables[j];
                    if (config.hasOwnProperty(k)) {
                        object[k] = config[k];
                    }
                }
            }
        }

        return object;
    }

applyif:經常使用於默認參數初始化,apply參數倒排排列數組

Ext.applyIf({a:1,b:2},{b:3,c:4});//{a: 1, b: 2, c: 4}
        //主要用於默認參數配置,沒有嵌套和枚舉兼容
        applyIf: function(object, config) {
            var property;

            if (object) {
                for (property in config) {
                    if (object[property] === undefined) {
                        object[property] = config[property];
                    }
                }
            }

            return object;
        },

bind:Ext.Function.bind的快捷方式瀏覽器

var fn=Ext.bind(function(){console.log(this,arguments)},{},[1,2,3],true);
fn(('a','b','c','d');//Object {} ["a", "b", "c", "d", 1, 2, 3]
    bind: function(fn, scope, args, appendArgs) {
        //僅包含兩個參數,做用域封裝-->代理函數
        if (arguments.length === 2) {
            return function() {
                return fn.apply(scope, arguments);
            };
        }

        var method = fn,
            slice = Array.prototype.slice;

        return function() {
            //參數覆蓋
            var callArgs = args || arguments;
            //追加or指定修改位置
            if (appendArgs === true) {
                callArgs = slice.call(arguments, 0);
                callArgs = callArgs.concat(args);
            }
            else if (typeof appendArgs == 'number') {
                callArgs = slice.call(arguments, 0); 
                Ext.Array.insert(callArgs, appendArgs, args);
            }

            return method.apply(scope || Ext.global, callArgs);
        };
    },

callback:Function.call,apply,Ext.defer的封裝(含參數數組話)閉包

Ext.callback('a',{a:function(){console.log(this,arguments)}},[1,2,3],5000);//執行做用域下的方法,並傳遞參數,延遲時間
Ext.callback(function(){console.log(this,arguments)},{},[1,2,3],5000);//回調方法,並傳遞參數,延遲時間
 //方法,做用域,參數,延遲毫秒
    callback: function (callback, scope, args, delay, caller, defaultScope) {
        if (!callback) {
            return;
        }
        var preventClimb = scope === 'this' || scope === 'controller';
        //字符串...
        if (callback.charAt) { 
            if ((!scope || preventClimb) && caller) {
                scope = caller.resolveListenerScope(preventClimb ? scope : defaultScope);
            }
            if (!scope || !Ext.isObject(scope)) {
                Ext.Error.raise('Named method "' + callback + '" requires a scope object');
            }
            if (!Ext.isFunction(scope[callback])) {
                Ext.Error.raise('No method named "' + callback + '" on ' +
                                (scope.$className || 'scope object'));
            }

            callback = scope[callback];
        } else if (preventClimb) {
            scope = defaultScope || caller;
        } else if (!scope) {
            scope = caller;
        }
        
        var ret;

        if (callback && Ext.isFunction(callback)) {
            scope = scope || Ext.global;
            if (delay) {
                //delay毫秒後執行
                Ext.defer(callback, delay, scope, args);
            } else if (args) {
                //參數調用
                ret = callback.apply(scope, args);
            } else {
                //無參調用
                ret = callback.call(scope);
            }
        }

        return ret;
    },

clone:克隆app

 

copyTo:選擇性copy屬性dom

Ext.copyTo({}, {a:1,b:2,c:3}, 'a,b');//Object {a: 1, b: 2}
Ext.copyTo({}, {a:1,b:2,c:3}, ['a','b','e'],true);//Object {a: 1, b: 2, e: undefined}
    //結果,來源,所需屬性,強制增長key
    copyTo : function(dest, source, names, usePrototypeKeys){
        if(typeof names == 'string'){
            names = names.split(/[,;\s]/);
        }

        var n,
            nLen = names? names.length : 0,
            name;

        for(n = 0; n < nLen; n++) {
            name = names[n];

            if (usePrototypeKeys || source.hasOwnProperty(name)){
                dest[name] = source[name];
            }
        }

        return dest;
    },

create:無 new實例化,自帶加載器,關鍵是能夠用它動它new,相似於//與RegExpide

createByAlias:-->Ext.ClassManager.instantiateByAlia函數

decode:-->Ext.json.decode

defer:setTimout的封裝

define:定義

destory:批量調用對象的destory

destroyMembers:刪除並返回

each:循環

encode:-->Ext.JSON.encode

exclude:-->Ext.Loader.exclude

fly:-->Ext.dom.AbstractElement.fly

iterate:掉用object/array的each

log:瀏覽器日誌封裝

merge:Ext.Object.merge

ns,namespace:命名空間

override:重載,複製,繼承的語意話封裝

pass:-->Ext.Function.pass

preg:-->Ext.PluginManager.registerType

query:-->Ext.dom.Query.select

regStore:註冊store

require:Ext.Loader.require

select:css選擇器

 

各個get,is函數

以上封裝大多爲閉包化(做用域),類似功能封裝,不一樣業務區分以及快捷方式

相關文章
相關標籤/搜索