代码改变世界

解决Ext Combobox允许用户插入及修改任意值,不用限制只能新增或修改数据表里即有字段

2010-01-17 19:49  Terry_龙  阅读(2160)  评论(0编辑  收藏  举报

做这个效果是应公安局他们要求,需要一个能有下拉提示带记忆功能并且可输入的文本框,,技术差,只能想到这个东西 ,磨了好久终于勉强可以,算是摸索吧,有逻辑错误的地方或者更精简的方法希望多多提出来,谢谢

<script type="text/javascript">
  Ext.onReady(function(){
      //数据源
         var store = new Ext.data.SimpleStore({
                     proxy : new Ext.data.HttpProxy({//读取远程数据的代理 
                            url : 'TZDW.ashx'//远程地址 
                     }),
                     fields : ['TZDW','Aid'], data:[['','']]


              });
             var cb= new Ext.ux.ComboBox({
                            queryParam : 'name',//查询的名字   
                            allQuery:'allname',//查询全部信息的查询字符串 
                            loadingText : '正在加载通知单位信息',//加载数据时显示的提示信息 
                            minChars : 1,//下拉列表框自动选择前用户需要输入的最小字符数量 
                            queryDelay : 1000,//查询延迟时间                    
                            triggerAction: 'all',//单击触发按钮显示全部数据 
                            store : store,//设置数据源 
                            displayField:'TZDW',//定义要显示的字段 
                            valueField:'Aid',         //id字段                
                            mode: 'remote',//远程模式,
                             transform:'TZDW_Type',//转换<select>成为combobox,之前是用层,但层有时候会和其他JS冲突,测试过
                            typeAhead:true,                           
                            hiddenName:'Aid'  //后台要接收的值
                          
                   });
                
            //cb.setValue("<%=TZDW.Value %>");---(赋值)修改时候把这句放出来就行~~,只需要丢一个参数进来即可
                    cb.on('blur',function()
                     {this.setValue(this.el.dom.value)}
                     )        
                     
       });
</script>

 

 

 

 fields : ['TZDW','Aid']后面加上这一句:, data:[['','']]是为了防止数据库没有值的情况能给他一个固定格式的空值。。才好插入你想要的值,因为后台接收是request这个下拉框的id值输入的时候有一个格式他会自动把他放进去,这样子才能获取得到,心里也没什么谱,只能说有个大体上的概念,理解不太深刻。

 

 

还有一点希望高手能指教:就是我的store我都是一个文本框用一个一般处理程序去加载他,。这样子写觉得好傻,很想优化一下他,但不知道从何下手,,思想 是有,但有点难以下手希望能得到大家的指点谢谢~~

 

关于多个combobox共享一个一般处理程序的参数问题:再此多谢(  :) 呼呼小跑  34638822)前辈

listeners:{focus:function(){this.store.load({params:{type:'BYLA'});}}

type:后面对应参数    如果要参数也是一个变量那就要传一个object类型的变量

我一般直接在一般处理程序里面定义好switch(context.request["type"])然后去case:''不同的参数即可~~

 

 

这是前辈提供的传参例子

var pobj = new Object();
eval("pobj.metaName='"+queryForm.metaName+"';");
Ext.getCmp(queryForm.metaCode + '_grid').getStore().load(
     {
     params: pobj
});

eval(。。。。。)可以通过这样的方式,添加任意需求的参数表


 

 

 

心得共享出来希望能帮助别人