addBehaviors:批量添加事件

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的快捷方式

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:常用于覆盖,约等于$.extend

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:克隆

 

copyTo:选择性copy属性

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,类似于//与RegExp

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函数

以上封装大多为闭包化(作用域),相似功能封装,不同业务区分以及快捷方式

 

posted on 2015-11-12 19:04  Glimis  阅读(417)  评论(0编辑  收藏  举报