zoukankan      html  css  js  c++  java
  • EXTJS7 自定义配置延迟初始化

    config段中的自定义配置默认会在initConfig中被初始化,一般会在构造函数中调用initConfig。
    使用lazy属性可以避免配置在initConfig时被初始化,延迟到被调用时初始化。(延迟触发apply、update)

    样例

    config: {
    	configProp: 'prop',
    	configPropLazy: {
    		lazy: true,
    		$value: 'configPropLazy'
    	}
    }
    

    源码分析

    初始化

    Base.js

    initConfig: function(instanceConfig) {
        var me = this,
            cfg = me.self.getConfigurator();
    
        me.initConfig = Ext.emptyFn; // ignore subsequent calls to initConfig
        me.initialConfig = instanceConfig || {};
        cfg.configure(me, instanceConfig);
    
        return me;
    },
    

    Configurator.js

    configure: function(instance, instanceConfig) {
    	...
    	if (cfg && !cfg.lazy) {
    	    --remaining;
    	    // A proper "config" property so call the setter to set the value.
    	    names = cfg.names;
    	    getter = names.get;
    	
    	    // At this point the initGetter may have already been called and
    	    // cleared if the getter was called from the applier or updater of a
    	    // previously processed instance config. checking if the instance has
    	    // its own getter ensures the setter does not get called twice.
    	    if (instance.hasOwnProperty(getter)) {
    	        instance[names.set](values[name]);
    	
    	        // The generated setter will remove the initGetter from the instance
    	        // but the user may have provided their own setter so we have to do
    	        // this here as well:
    	        delete instance[names.get];
    	    }
    	}
    	...
    }
    
    延迟初始化

    Config.js

    makeInitGetter: function() {
        var name = this.name,
            names = this.names,
            setName = names.set,
            getName = names.get,
            initializingName = names.initializing;
    
        return function() {
            var me = this;
    
            me[initializingName] = true;
            // Remove the initGetter from the instance now that the value has been set.
            delete me[getName];
    
            me[setName](me.config[name]);
            delete me[initializingName];
    
            return me[getName].apply(me, arguments);
        };
    },
    
  • 相关阅读:
    java中BigDecimal的四舍五入小记
    thinking in java学习笔记:14章 类型信息
    java中==和equals
    java中值传递和引用传递
    java中的赋值
    hessian学习笔记
    springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题
    要是满足下面的其中3种情况,你就跑路吧
    vim程序编辑器---常用操作整理
    报错end Kernel panic
  • 原文地址:https://www.cnblogs.com/luguojun/p/14294766.html
Copyright © 2011-2022 走看看