宝哥软件园

ExtJS设置级联菜单的默认值

编辑:宝哥软件园 来源:互联网 时间:2021-10-22

ExtJS在这样的页面上修改赋值非常方便。从文本中的1.2.1代码可以看出,可以通过一行代码来完成,但这是针对普通控件的,比如文本框。组合框没那么简单.版本Ext JS库3.0.0文本一、问题1.1截图

1.2代码1.2.1前端代码复制代码代码如下:脚本类型=' text/JavaScript '/函数ExtStore(URL){ 0返回新的延伸文件系统数据。商店({ proxy : new ext。数据。http proxy({ URL : URL }),阅读器:新ext。数据。jsonreader({ total property : ' count ',root: 'result' },[{ Name 3: ' Id ' },{ Name 3: ' Name ' })});} Ext.onReady(函数(){ Ext .快速提示。init();延伸文件系统形式。字段。原型。msgtarget=' sidevar store 1=ExtStore(' combox。aspx?方法=获取外省');var store 2=ExtStore(' combox。aspx?method=get city s’);var combo2=ComboBox('combo2 ','二级菜单,商店2);var组合1=新Ext。形式。combobox({ mode : ' remote ',fieldLabel: '一级菜单,名称为:'combo1 ',可编辑: false,typeAhead: true,triggerAction: 'all ',displayField:'Name ',valueField:'Id ',selectOnFocus:true,store:store1,listener 3360 { ' select ' :函数(组合,记录){ var Id=record。获取(' Id ');if(id) { //清空二级菜单选项组合2。setRawVaLue(" ");二号店。proxy=new ext。数据。http proxy({ URL :字符串。格式(' combox。aspx?method=GetCitysProvince={0} ',id)});二号店。load();} } } });var form1=新分机.FormPanel({ layout: 'form ',autoHeight: true,frame: true,renderTo: Ext.getBody(),title : ' center style=' curor : hand ' onclick=' window。位置。重载();'表单控件/center ',样式: '边距-左侧: auto右边距:汽车;宽度宽度:500像素边距-top :8 px;', //设置标签对齐方式标签: '右',//设置标签宽标签号: 170,//设置按钮的对齐方式按钮对齐: '中央',//默认元素属性设置defaults:{ width:180 },items: [ combo1,combo 2]});//加载数据延伸文件系统Ajax。请求({ URL : '组合框。aspx?方法=细节',方法: 'GET ',回调:函数(选项,成功,响应){ if(成功响应。status==200){ //将值批量赋值表格1。形式。setvalues(ext。乌提尔。JSON。解码(响应。response text))});});/script 1.2.2后台代码复制代码代码如下:静态IListCombox省份=新ListCombox();static IDictionaryint,Combox Citys=new Dictionaryint,Combox();静态组合框(){省份。添加(新组合框(){标识=1,名称='湖南省' });省份。添加(新组合框(){标识=2,名称='广东省' });城市。添加(1,新组合框(){标识=1,名称='长沙市' });城市。添加(2,新组合框(){ Id=1,名称='岳阳市' });城市。添加(3,新组合框(){ Id=2,名称='深圳市' });城市。添加(4,新组合框(){ Id=2,名称='珠海市' });}受保护的无效页面_加载(对象发送者,EventArgs e) { } ///summary //获取所有省份数据////summary///returns/returns public void get省份(){回应.Write(new StringBuilder().追加(' {count: ').追加(省份。计数)。追加(',result: ').追加(JavaScriptConvert转换.序列化对象(省份))。追加(' } ')。ToString());} ///摘要///获取省下面的市区数据////summary////returns/returns public void getcities(){ IListCombox result=new ListCombox();省内=转换。至32(请求查询字符串['省份']);foreach(键值打印,城市中的下拉框数据){ if(数据.值。标识==省)结果。添加(新Combox() { Id=data .密钥,名称=数据。值。名称});}回应编写(新的字符串生成器().追加(' {count: ').追加(结果。计数)。追加(',result: ').追加(JavaScriptConvert转换.SerializeObject(结果))。追加(' } ')。ToString());}公共重写字符串Detail() { IDictionarystring,int result=new Dictionarystring,int();结果添加(' combo1 ',2);结果。添加(' combo2 ',2);返回JavaScriptConvert转换.SerializeObject(结果);}类Combox { public int Id { get设置;}公共字符串名称{获取设置;} } 1.3代码说明1.3.1后台代码中使用的数据仅用测试用1.3.2意图:加载的时候就默认选择广东省——珠海市二、问题分析组合框延迟加载导致。

三.解决方案2.1让ComboBox在赋值后显示对应的Name而不是Id,并添加一句“store 1 . load();”Ext之前。Ajax.request被执行。你可以。

2.2ComboBox级联赋值级联赋值并没有那么简单,它需要手动触发事件,而且这里需要很长时间才能得到结果。2.2.1第一步,手动触发一级菜单选择事件复制代码如下: store 1 . load();//加载数据ext . Ajax . request({ URL : ' combo . aspx?method=Detail ',method: 'GET ',callback:函数(选项,成功,响应){if (successresponse。status==200){//批量为form 1 . form . setvalues(ext . util . JSON . decode(response . response ext))赋值var combo val 1=combo 1 . getvalue();var selectRecordstore1.each(函数(记录){ if(record . data . id==combo value1)select record=record;});combo1.fireEvent('select ',combo1,SelectRecord);} } });这里发现手动触发的参数是自己传入记录的,否则里面没有值。2.2.2修改级联复制代码如下: store 2 . load({ callback : function(r,options,success){ if(success){ if(is load){ combo 2 . setvalue(combo value 2);IsLoad=false} } } });代码: a)。IsLoad是一个全局变量,用于控制默认值只设置一次。b)一旦菜单1被触发,很容易犯直接给菜单2赋值的错误。注意,菜单2还没有被加载,所以如果你在触发事件之后直接写赋值,它仍然是一个数字。4.代码下载/201006/马援/combox2010-6-12。rar End Note代码,如PageBase、ComboBox(‘combo 2’、‘辅助菜单’、store2)可以在我之前的文章中找到。除了抱怨,还可以选择排除遇到的问题。解后的快感很深刻。这个问题很早就解决了,一直没有时间写。我仍然记得很清楚。

更多资讯
游戏推荐
更多+