下拉窗口 
 
在做下拉窗时应注意的是:
1、在显示页面:
 
  1. {  
  2.     header:'上级',  
  3.     dataIndex:'superiorsId',  
  4.     editor : personComboBox,  
  5.     renderer:function(v) {  
  6.     var index = personComboBox.store.find('id',v);  
  7.     return personComboBox.store.getAt(index).get('realName');  
  8.                 } 
personComboBox代码为:
 
  1. Ext.namespace('Xietong.person');  
  2.  
  3. Xietong.person.PersonStore = Ext.extend(Ext.data.Store, {  
  4.     proxy: new Ext.data.HttpProxy({  
  5.         url:'mocule/common/listUser.do' 
  6.     }),  
  7.     reader:new Ext.data.JsonReader({  
  8.         root:'root',  
  9.         totalProperty:'totalCount' 
  10.     },[  
  11.         {name : 'id'},   
  12.         {name : 'userName'},   
  13.         {name : 'password'},   
  14.         {name : 'realName'},   
  15.         {name : 'mobile'},  
  16.         {name : 'gender'},   
  17.         {name : 'birthday',type : 'date',dateFormat:'Y-m-d'},   
  18.         {name : 'school'},   
  19.         {name : 'specialty'},   
  20.         {name : 'departmentId'},   
  21.         {name : 'departmentName'},   
  22.         {name : 'superiorsId'},  
  23.         {name : 'superiorsName'}  
  24.     ])  
  25. });  
  26.  
  27. Xietong.person.PersonComboBox = Ext.extend(Ext.form.ComboBox, {  
  28.     fieldLabel:'上级',  
  29.     name:'superiorsId',  
  30.     hiddenName:'superiorsId',  
  31.     anchor:'90%',  
  32.     store: new Xietong.person.PersonStore(),  
  33.     valueField:'id',  
  34.     displayField:'realName',  
  35.     triggerAction : 'all',  
  36.     mode:'local',  
  37.     editable: false,  
  38.     triggerAction: 'all',   
  39.     allowBlank:false,   
  40.     emptyText :'--请选择--' 
  41. });  
listUser代码为:
 
  1. public ActionForward list(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)  
  2.     throws Exception {  
  3.            List<Department> list = departmentService.list();  
  4.                StringBuffer buf = new StringBuffer("");  
  5.                for (int i = 0; i < list.size(); i++) {  
  6.         Department department = list.get(i);  
  7.         if(i != 0) buf.append(",");  
  8.         buf.append("[")  
  9.            .append(department.getId())  
  10.            .append(",'")  
  11.            .append(department.getDepartmentName())  
  12.            .append("','")  
  13.            .append(department.getDepartmentDesc()).append("']");  
  14.         }  
  15.     String str = "[" + buf.toString() + "]";  
  16.     response.setCharacterEncoding("UTF-8");  
  17.     response.getWriter().print(str);  
  18.     return null;  
  19.     } 
2、要注意的是,这是数据库中的没有空值,要不然index会有负值。
3、其中Ext.Store 有属性有:
store是一个为Ext器件提供record对象的存储容器,行为和属性都很象数据表

方法:不列举继承来的方法
Store( Object config )
构造,config定义为{
autoLoad : Boolean/Object,    //自动载入
baseParams : Object,    //只有使用httpproxy时才有意义
data : Array,        //数据
proxy : Ext.data.DataProxy,//数据代理
pruneModifiedRecords : boolean,//清除修改信息
reader : Ext.data.Reader,    //数据读取器
remoteSort : boolean,    //远程排序?
sortInfo : Object,    //{field: "fieldName", direction: "ASC|DESC"}这样的排序对象
url : String,        //利用url构造HttpProxy
}

add( Ext.data.Record[] records ) : void
增加记录records 到store

addSorted( Ext.data.Record record ) : void
增加record到store并排序(仅本地排序时有用)

clearFilter( Boolean suppressEvent ) : void
清除过滤器

collect( String dataIndex, [Boolean allowNull], [Boolean bypassFilter] ) : Array
收集由dataIndex指定字段的惟一值

commitChanges() : void
提交Store所有的变更,会引发Update事件


filter( String field, String/RegExp value, [Boolean anyMatch], [Boolean caseSensitive] ) : void
设定过滤器
field:String    //字段名
value:String    //RegExp 如果是字符器,检查field是否以value开始,如果是正则,检查是否匹配
anyMatch:Boolean //匹配任何部分而不仅令是开始
caseSensitive:Boolean //大小写敏感?

filterBy( Function fn, [Object scope] ) : void
更强悍的过滤方法.fn接收两个参数record和id

find( String property, String/RegExp value, [Number startIndex], [Boolean anyMatch], [Boolean caseSensitive] ) : Number
找到符合条件的第一条记录,参数同filter

findBy( Function fn, [Object scope], [Number startIndex] ) : Number
参见filterBy

getAt( Number index ) : Ext.data.Record
getById( String id ) : Ext.data.Record
依充号/id得到record对象

getCount() : void
得到记录数

getModifiedRecords() : Ext.data.Record[]
得到修改过的记录集

getRange( [Number startIndex], [Number endIndex] ) : Ext.data.Record[]
得到指定范围的记录集合

getSortState() : void
得到排序状态:显然不是void而是返回一个排序对象,同sortInfo一样的结构{field: "fieldName", direction: "ASC|DESC"}

getTotalCount() : void
这个对于翻页信息还是很有用的

indexOf( Ext.data.Record record ) : Number
indexOfId( String id ) : Number
由记录或id得到序号

insert( Number index, Ext.data.Record[] records ) : void
在指定的位置插入记录,并引发add事件

isFiltered() : Boolean
当前设置了过滤器则返回真

load( Object options ) : void
由指定的Proxy使用指定的reader读取远程数据
options定义为
{
    params :Object,    //请求url需要附加的参数
    callback :Function//回叫方法,接收三个参数
      //r : Ext.data.Record[] //返回的record数组
      //options: Options load方法传入的options
      //success: Boolean //成功
    scope :Object, //范围.默认是store本身
    add :Boolean 追加还是更新
}


loadData( Object data, [Boolean append] ) : void
用法比load简单一点,目的是一样的,只是这次数据由本地读取

query( String field, String/RegExp value, [Boolean anyMatch], [Boolean caseSensitive] ) : MixedCollection
queryBy( Function fn, [Object scope] ) : MixedCollection
查询,参数和find类似,但返回所有符合条件的record,而不是第一个符合条件记录的序号

rejectChanges() : void
放弃所有的变更

reload( [Object options] ) : void
重新载入,相当于 load(options,false),如果连options都没有传入,则取最后一次load时使用的参数

remove( Ext.data.Record record ) : void
移除指定记录

removeAll() : void
移除所有记录

setDefaultSort( String fieldName, [String dir] ) : void
设置默认排序规则

sort( String fieldName, [String dir] ) : void
排序

sum( String property, Number start, Number end ) : Number
对property字段由start开始到end求和

事件列表
add : ( Store this, Ext.data.Record[] records, Number index )
beforeload : ( Store this, Object options )
clear : ( Store this )
datachanged : ( Store this )
load : ( Store this, Ext.data.Record[] records, Object options )
loadexception : ()
metachange : ( Store this, Object meta )
remove : ( Store this, Ext.data.Record record, Number index )
update : ( Store this, Ext.data.Record record, String operation )
看名字都很简单,参数也不复杂,略过
 
 
问题:
回复:怎么获取Stroe中的某一个选项的值??
store.find(field,value) 通过一个字段的名和其对应的值,获取store中的一个record的索引 ,假如将之给变量index
store.getAt(index)来获取该Record 给变量record
record.get(otherField) 取得otherField所对应的值
4、可以用“alert();”来进行调试。