• 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);
        };
    },
    
  • 相关阅读:
    使用Razor模板构建应用注意的细节
    分享一个秒计数器
    有效提高命中率的缓存设计
    伟大的C语言
    关于在使用Visual C++中使用MMX、SSE指令集的问题
    如何用SVN 或 WINCVS 下载x264 ffdshow T264 Kevinlib
    Visual C++图形特技
    图象处理部分文章列表
    C++,VC资源
    Visual C++ 如何:在各种字符串类型之间进行转换
  • 原文地址:https://www.cnblogs.com/luguojun/p/14294766.html
Copyright © 2020-2023  润新知