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拉个关系的
?