ext是怎么存储对象(笔记)

var grid = new Ext.grid.GridPanel()
实例化一个grid,那么这个grid被保存在那了呢?就象Ext保存在window下一样,
如果能够知道grid存在那,就可以得到相应的很多数据了,当然Ext.getCmp是能得到
这个组件的,那这个getCmp()又是从那取的呢?
//源码
getCmp : function(id){
        return Ext.ComponentMgr.get(id);
}
get : function(id){
        return all.get(id);
    },
也就是说实例化的组件对象是保存在ComponentMgr的all中的,那all是嘛?
ComponentMgr内第一行就是:
var all = new Ext.util.MixedCollection();
进入MixedCollection,它里面定义了两个数组(items,keys),一个map
在new一个grid时,会在items中添加一个grid的对象,keys中添加一个对象的grid的id,而在map中会存这个id与这个对象的键值对

new grid时,会调用initComponent方法,而父类在Container的initComponent方法中会触发add事件,add方法中第一句是
this.initItems()
  initItems : function(){
        if(!this.items){
            this.items = new Ext.util.MixedCollection(false, this.getComponentId);
            this.getLayout(); // initialize the layout
        }
    },
在这里新建了一个MixedCollection,在add方法中接着会将组件add到items中this.items.add(c);

但是我始终搞不明白ComponentMgr是怎么和这个MixedCollection拉个关系的

 

你可能感兴趣的:(C++,c,ext,C#)