1. 在拿一个提交页面的例子学习,发现老是new Ext.form.Form被提示不是一个容器的错误。查了些资料,原来在开发者log中被删除,在版本2.0后不再支持该类。(
http://extjs.com/forum/showthread.php?t=12866)
其中,该类中的部分函数也被移除掉,如添加输入控件的fieldset。在看教程中一定要看清楚该版本是属于啥版本,否则搞错了就要费工夫翻源码,找问题了。
src/widgets/form/
Field
- Removed applyTo function (use base render function instead)
Form
- Converted Ext.form.Form to Ext.form.FormPanel (extends Panel instead of BasicForm)
- Removed functions column, fieldset, container, start and end
Layout
- Replaced Ext.form.Layout with Ext.layout.FormLayout
- Changed Fieldset to extend FormLayout instead of form.Layout
其中更为详细的1.0到2.0的修改移植见:http://hzjavaeyer.group.javaeye.com/group/blog/134693
2.有关ext的架构模型(来自i_love_sc,不过好像讲解的是1.0版本的,)
EXT中所有和数据相关的类都放在Ext.data命名空间下。
* Store: 最主要的对外交互接口,内部保存了一个数据集。
JsonStore
JsonReader 把代理读取的数据读入数据集。
* Record: 数据集里面的每一条记录。
* DataField: 定义了记录每个字段的schema。
* DataProxy: 获取数据的代理。
ScriptTagProxy
HttpProxy,
* DataReader: 把代理读取的数据读入数据集。
Store的实现
内部用一个Ext.util.MixedCollection(既能够作为map进行索引,又能够作为list进行索引,并且更新数据时会触发事件,并且有一些其它功能的数据结构)作为数据集存放record。store实例的data域指向这个数据集。
通过proxy加载不同来源的数据,如http remote,memory data等等。
由于proxy加载过来的数据是异构的,所以通过不同DataReader的实现类来读入数据成为record。
当调用load方法时候,就会委托proxy去加载数据。
在data数据集中数据的数据,添加,修改,删除的时候触发事件。
Store数据加载流程简介
- 实例化一个Proxy的实现proxy。
- 实例化一个DataReader的实现reader。
- 实例化一个Store对象store。设置store的proxy与reader。
- 监听store的load事件或者datachange事件。
- 调用store.load()
- store.load会调用proxy的load方法来加载数据(各种DataSource)。并且把reader作为参数传入。
- proxy的load方法加载完数据之后,调用传入的reader的read方法,并且把数据作为参数传入。
- reader的read方法把异构数据读入成record数据集。
- proxy把reader.read方法生成的record数据集作为参数,回调store。
- store把数据集添加到或者替换原来的数据集。
- 触发load事件,触发datachange事件。