Ext.Store的获取方法 (转自关盛裕的博客)
来源:互联网 发布:唐诗三百首详析 淘宝网 编辑:程序博客网 时间:2024/05/12 12:27
一直都是这样定义store的:
var store = new Ext.da
store.load();
但是最近在改进自己的Ext设计方法的时候(也就是使用Ext的extend来实现继承的设计方法),却遇到了无法获取Store的问题。看下面的代码:
Leangle.form.combo.ColorComboBox = Ext.extend(Leangle.form.BaseComboBox,{id : "combo_color",
name:'colorId',
hiddenName:'colorId',
valueField : "colorId",
displayField : "colorName",
fieldLabel : "颜色",
store:new Ext.da
id:'store_color',
url : "whInput!getColorList.act
method : "post",
root : "ColorList",
fields : ["colorId", "colorName"],
autoLoad : true
})
});
我把Store的定义放在了ComboBox里面,给Store赋予了id。于是我是想当然地认为只要使用
Ext.getCmp('store_color');这个方法就应该可以获取到这个Store。可是我测试了多遍,发现获取到的是一个undefined的对象,也就是说,获取不到,或者说,页面根本就不存在这个对象。
奇怪,检查了一遍API文档,Componont类明明写着getCmp()方法可以获取到Ext封装的组件。而Store也并Ext认为属于组件部分。那为什么我用getCmp()却获取不到这个对象呢???
问题来了~其实在很早之前我就有个疑问。Ext设计的控件其实最底层还是封装了<div>和css,你说外观嘛,有外观的控件当然可以用div和css来显示,但是store可不是一个有外观的控件,它没有表现形式,只是一个普通的用来存储数据的对象而已。如果是以div的形式保存在页面的话,那么数据在哪里?而且一个div也不可能保存store中的数据吧?这样会非常危险的。因为查看源码就会暴露store中的数据,这对于数据权限控制是不利的。那store究竟在哪里呢?在内存中?
深入一步。从getCmp()的源码中可以理解到。getCmp()其实就是获取这个页面上的某个div。按照这样想下去就有点吻合了。Store如果不是保存在页面的话,那么就肯定是保存在内存中(而这也符合对数据的保护)。另一方,Store如果不是保存在页面的话,那么getCmp()当然也就不能获取到它了。
再深入一步,查看Store的API,发现一个很奇怪的问题,Store并没有id,取而代之的是storeId这样的一个属性。对于这个storeId的描述是:
If passed, the id to use to register with the StoreMgr.
Note: if a (deprecated) id is specified it will supersede the storeId assignment.
大概意思是说:如果store成功初始化了,它的id将会被注册到一个叫StoreMgr(StoreManager的简写)的对象中。注意:如果id被指明的话,将会取代storeId。
store会被注册到一个叫StoreMgr的对象中?那我们就看看这个对象是何方神圣!!!
StoreMgr: Class Ext.StoreMgr
The default global group of stores。//默认的全局Store组
This class is a singleton and cannot be created directly。这个类是唯一的,不能直接创建。
估计看到这里,大家都明白了,这个StoreMgr对象就是用来管理Store的。也就是说,这个对象在Ext初始化之后,就存在了,采用单例模式,并负责store的存储和管理工作。这个对象估计就是存储在内存中的。我们声明的Store被保存到这里来了,所以页面也就找不到了。
综上所述,Store可以用以下方法获取到:
Ext.getCmp('combo_color').store;//通过引用这个store的控件来获取这个store
Ext.StoreMgr.get('store_color'); //通过这个全局store管理器来获取
问题解决。
- Ext.Store的获取方法 (转自关盛裕的博客)
- Sencha touch中Ext.data.Store获取json串中key值的方法
- Ext.Store 的使用
- Ext.Store 的使用
- 让用户在应用中进入 App Store 打分的代码 转自:hager的博客
- Ext里面Store的例子
- ext store 过滤方法
- Ext.data.Store中JsonReader 属性值获取方法
- ext中store.load和store.reload的区别
- ext中store.load跟store.reload的区别
- 访问Ext.data.store的数据
- ext中gridpanel切换store的实现
- Ext 扩展的 Store实现同步加载
- Ext.data.Store的基本用法
- Ext.data.Store的基本用法
- 动态改变Ext.data.store的Url
- Ext Js 3.2 store的用法学习
- Ext中 对store 的操作
- 使用internal(com.android.internal)和hidden(@hide)APIs – Part 2
- 期间状态
- js弹出层、遮罩、div层的几种效果
- vs2010创建oracle实体模型
- OpenCV获取某点的像素值
- Ext.Store的获取方法 (转自关盛裕的博客)
- dhx 链接
- 寻找最大的K个数 (C语言实现)
- ReflectUtil
- 用latex插入图片在固定位置,不被latex自动安排位置方法
- poj_1611The Suspects
- Java从web服务器下载文件到本地
- Javascript中创建对象的几种方法
- Ubuntu下安装net-snmp5.7.1的方法