`
chenxueyong
  • 浏览: 342066 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Extjs学习笔记(-):ComboBox联动

阅读更多
看到Extjs Example那些美轮美奂的界面,我也不禁心动了,也加入到学习Extjs的行列中来了,到园子里找了些朋友们的相关文档,囫囵吞枣的大都看了一遍,好像都还能理解,不过,经验告诉我,能看懂与能自己写,那根本就是两回事,况且这次还是大部分的手写javascript代码呀,所以还是不能光说不练,现在就动手:
我准备用ExtJS实现两个comeboBox(DropDownList)联动的效果,代码如下:
服务端代码:CategoryManage.aspx
GetCatWise.aspx
1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Collections;
5 using System.Web;
6 using System.Web.Security;
7 using System.Web.UI;
8 using System.Web.UI.WebControls;
9 using System.Web.UI.WebControls.WebParts;
10 using System.Web.UI.HtmlControls;
11 using RainbowSoft.BLL;
12 using RainbowSoft.Module;
13 using Newtonsoft.Json;
14
15 public partial class Admin_GetCatWise : System.Web.UI.Page
16 {
17     protected void Page_Load(object sender, EventArgs e)
18     {
19         Response.Write(GetCatWise());
20     }
21
22     private string GetCatWise()
23     {
24         CategoryWiseBLL cbl = CategoryWiseBLL.Instance;
25         return JavaScriptConvert.SerializeObject(cbl.GetCatWise());
26     }
27 }还有一个通过传入的分类方式ID获取类别列表的页面,代码和上面的大同小异,我就不贴出来了,需要特别说明的就是,客户端需要返回的数据格式为JSON格式,JavaScriptConvert.SerializeObject(cbl.GetCatWise()),这句代码就是把服务器端返回的list对象序列化成JSON格式,返回的数据如下:
[{"ID":"91ad6568-9b13-42b3-8004-4140dae534ed","Name":"按印花工艺分类","Type":null,"PubTime":new Date(1195331771000)},{"ID":"9e5c6fa7-873e-4a6b-8f99-76f9c80bf1b4","Name":"按印花工艺分类","Type":null,"PubTime":new Date(1195335234000)},{"ID":"1185849f-f032-4e0f-9247-84acb9a766be","Name":"按印花工艺分类2","Type":"asdfasdf","PubTime":new Date(1196121239000)},{"ID":"724f4feb-faf8-47cb-a5ce-89e72530a74e","Name":"按印花工艺分类2","Type":null,"PubTime":new Date(1195335316000)},{"ID":"ec22aa35-d5c7-4089-bf35-8bf5f6787c06","Name":"按印花工艺分类","Type":null,"PubTime":new Date(1195333503000)},{"ID":"36814f7c-8c44-49e9-82e9-c5bc8d1be3e7","Name":"按印花工艺分类2","Type":null,"PubTime":new Date(1196118357000)}]
接下来就是核心的js代码了:
  1 // JScript 文件
  2 Ext.onReady(function(){
  3     var win;
  4     var btnAdd=Ext.get('btnAdd');
  5    
  6     //分类方式数据源
  7     var store=new Ext.data.Store({
  8         proxy:new Ext.data.HttpProxy({
  9             url:'../admin/GetCatWise.aspx'
10         }),
11         reader:new Ext.data.JsonReader({
12             id:'ID',
13             fields:['ID','Name']
14         }),
15         remoteSort:true
16     });
17   
32     //grid 数据源
33     var gridstore=new Ext.data.GroupingStore({
34         proxy:new Ext.data.HttpProxy({
35             url:'../admin/categorymanage.aspx'
36         }),
37         reader:new Ext.data.JsonReader({
38             id:'ID',
39             fields:['ID','CategoryName','Code',{name:'PicCount',type:'int'},{name:'CCount',type:'int'},{name:'IsDefault',type:'string'},{name:'Name',type:'string',mapping:'CatWise.Name'}]
40         }),
41         remoteSort:true,
42         groupField:'Name'
43     });
44     gridstore.setDefaultSort('PubTime', 'desc');

49     function readerDefault(value,p,r){
50         return r.data.IsDefault? '是':'否';
51     }
52    
53     var nm = new Ext.grid.RowNumberer();
54     var sm = new Ext.grid.CheckboxSelectionModel();
55     var cm = new Ext.grid.ColumnModel([nm,sm,{
56            id: 'ID', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
57            header: "类别编号",
58            dataIndex: 'Code',
59            width: 10
61         },{
62            header: "类别名称",
63            dataIndex: 'CategoryName',
64            width: 100,
65            hidden: false
66         },{
67            header: "图片数",
68            dataIndex: 'PicCount',
69            width: 70,
70            align: 'right'
71         },{
72            header: "子类数",
73            dataIndex: 'CCount',
74            width: 70,
75            align: 'right'
76         },{
77            header: "分类方式",
78            dataIndex: 'Name',
79            width: 140,
80            align: 'center'
81         },{
82             header:"是否默认",
83             dataIndex:'IsDefault',
84             width:70,
85             align:'center',
86             renderer:readerDefault
87         }]);
88
89     // by default columns are sortable
90     cm.defaultSortable = true;
91    
92    
93     var grid=new Ext.grid.GridPanel({
94         el:'topic-grid',
95         width:600,
96         height:400,
97         title:'类别管理',
98         store:gridstore,
99         cm:cm,
100         sm:sm,
101         iconCls: 'icon-grid',
102         collapsible: true,
103         animCollapse: false,
104         //trackMouseOver:false,
105         //sm: new Ext.grid.RowSelectionModel({selectRow:Ext.emptyFn}),
106         loadMask: true,
107         stripeRows: true,
108         autoExpandColumn: 'ID',
109         viewConfig: {
110             forceFit:true,
111             //enableRowBody:true,
112             showPreview:true,
113             getRowClass : function(record, rowIndex, p, store){
114                 if(this.showPreview){
115                     p.body = '<p>'+record.data.ID+'</p>';
116                     return 'x-grid3-row-expanded';
117                 }
118                 return 'x-grid3-row-collapsed';
119             }
120         },
121        
122         view: new Ext.grid.GroupingView({
123             groupTextTpl: '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})'
124         }),
125        
126         tbar:[{
127             id:'btnAdd',
128             text:'新增',
129             tooltip:'新增',
130             iconCls:'add',
131             handler: showAddPanel
132         }, '-', {
133             text:'查询',
134             tooltip:'查询',
135             iconCls:'search'
136         }, '-', {
137             text:'批量删除',
138             tooltip:'删除',
139             iconCls:'remove'
141        }]
142     });
143    
144     grid.render();
145     gridstore.load();
146     grid.getSelectionModel().selectFirstRow();
147    
148     var form=new Ext.form.FormPanel({
149         labelWidth:55,
150         url:'save-form.php',
151         bodyStyle:'padding:5px 5px 0',
152         frame:true,
153         items:[{
154             layout:'column',
155             items:[{
156                 columnWidth:.78,
157                 layout:'form',
158                 items:[{
159                     fieldLabel:'类别编号',
160                     xtype:'textfield',
161                     name:'txtCode',
162                     id:'txtCode',
163                     anchor:'98%'
164                     //disabled:true
165                 }]
166             },{
167                 columnWidth:.22,
168                 layout:'form',
169                 items:[{
170                     hideLabel: true,
171                     boxLabel :'自动生成编号',
172                     xtype:'checkbox',
173                     name:'labCode',
174                     id:'labCode',
175                     anchor:'100%',
176                     checked:true,
177                     listeners:{check:function(){
178                         var txtCode=Ext.getCmp('txtCode');
179                         if(this.checked){
180                             txtCode.disable();
181                         }else{
182                             txtCode.enable();
183                         }
184                     }}
185                 }]
186             }]
187         },{
188             fieldLabel:'类别名称',
189             xtype:'textfield',
190             name:'labName',
191             anchor:'100%'
192         },{
193             fieldLabel:'分类方式',
194             xtype:'combo',
195             editable :false,
196             name:'labCatWise',
197             id:'cmbCatWise',
198             emptyText :'请选择',
199             displayField:'Name',
200             valueField :'ID',
201             mode:'remote',
202             store:store,
203             listeners:{select:function(){
204                 var parent=Ext.getCmp('comParent');
205                 var store =new Ext.data.Store({
206                     baseParams:{wiseID:this.value},
207                     proxy:new Ext.data.HttpProxy({
208                         url:'../admin/GetCategory.aspx',
209                         method:'post'
210                     }),
211                     reader:new Ext.data.JsonReader({
212                         id:'ID',
213                         fields:['ID','CategoryName']
214                     }),
215                     remote:true
216                 });
217                 parent.store=store;
218                 parent.displayField='CategoryName';
219                 parent.valueField ='ID';
220                
221                
222 //                    var conn=new Ext.data.Connection();
223 //                    conn.request({
224 //                        url:'../admin/GetCategory.aspx',
225 //                        method:'post',
226 //                        params:{wiseID:this.value},
227 //                        scope: this ,
228 //                        callback:function(options,success, response){
229 //                            if(success){  
230 //                                var cat = Ext.util.JSON.decode(response.responseText);  
231 //                                //Ext.MessageBox.alert(cat[0].CategoryName);
232 //                                //catstore.data=cat;
233 //                                var parent=Ext.getCmp('comParent');
234 //                                parent.store=new Ext.data.Store({
235 //                                    data:response.responseText,
236 //                                    reader:new Ext.data.JsonReader({
237 //                                        id:'ID',
238 //                                        fields:['ID','CategoryName']
239 //                                    })
240 //                                });
241 //                                parent.displayField='CategoryName';
242 //                                parent.valueField ='ID';  
243 //                            }   
244 //                            else    
245 //                                {Ext.MessageBox.alert("提示","所选记录删除失败!");}    
246 //                        } 
247 //                    });
248             }},
249             triggerAction:'all',
250             typeAhead :true,
251             anchor:'100%'
252            
253         }, {
254             fieldLabel:'所属父类',
255             xtype:'combo',
256             editable :false,
257             emptyText :'请选择',
258             id:'comParent',
259             loadingText :'正在请求数据,请稍后',
260             triggerAction:'all',
261             name:'labParent',
262             anchor:'100%'
263         },{
264             xtype: 'textarea',
265             hideLabel: true,
266             name: 'msg',
267             anchor: '100% -110'  // anchor width by percentage and height by raw adjustment
268         }]
269     });
270
271    
272     function showAddPanel(){
273         if(!win)
274         {
275             win=new Ext.Window({
276                 el:'hello-win',
277                 width:500,
278                 height:300,
279                 minWidth: 300,
280                 minHeight: 200,
281                 layout:'fit',
282                 closeAction:'hide',
283                 plain:true,
284                 bodyStyle:'padding:5px;',
285                 buttonAlign:'center',
286                 title:'添加类别',
287                 items:form,
288                
289                 buttons:[{
290                     text:'提交',
291                     handler:function(){
292                         Ext.MessageBox.alert('Warning!', 'Incorrect Login');
293                     }
294                 },{
295                     text:'取消',
296                     handler:function(){
297                         win.hide();
298                     }
299                 }]
300             });
301         }
302         win.show(this);
303     }
304 });
305
306 在以上代码中,我在第一个comboBox中添加了一个select事件,在这个事件中,我先获取到第二个comboBox,然后给他添加一个Store,不过,以上代码在页面第一次加载的时候运行成功,当我再次选择第一个comboBox时,第二个comboBox不会有数据被加载,不知道什么原因,还请各位大虾指教.
对了,代码环境是vs2005
分享到:
评论
1 楼 成溪先生 2010-04-15  
Ext.getCmp('comParent');
获取不到

相关推荐

    Extjs4---combobox省市区三级联动+struts2

    在这个特定的项目“Extjs4---combobox省市区三级联动+struts2”中,我们将探讨如何利用ExtJS 4的ComboBox组件实现省市区的三级联动效果,并结合Struts2框架进行数据交互。 首先,`ComboBox`是ExtJS中的一个组件,它...

    语言程序设计资料:ExtJs学习笔记-2积分.doc

    语言程序设计资料:ExtJs学习笔记-2积分.doc

    extjs ComboBox联动

    Extjs4---combobox联动实例

    无废话ExtJs 教程十[下拉列表:Combobox]

    在ExtJS中,下拉列表(Combobox)是常见的组件之一,它结合了输入框和下拉菜单的功能,允许用户进行选择或自由输入。本教程将深入探讨ExtJS中的Combobox组件,包括其基本用法、配置选项、事件处理和自定义功能。 1....

    extjs学习笔记-开发者必备

    对爱好extjs的开发者有帮助,提供中文api文档,及常用的方法!

    ExtJS笔记---Grid实现后台分页

    这篇“ExtJS笔记——Grid实现后台分页”探讨了如何在ExtJS的Grid组件中实现高效的后台分页功能。 后台分页是一种常见的数据处理策略,特别是在大数据量的情况下,它将数据分批加载,避免一次性加载所有记录导致的...

    ExtJs常用布局--layout详解实例代码

    ExtJs常用布局--layout详解实例代码: ExtJs常见的布局方式有:border、form、absolute、column、accordion、table、fit、card、anchor 另外,不常见的布局有:tab、vbox、hbox 具体使用方法可见该文件的案例代码。 ...

    jasmine-node-jsdom-extjs-testing-tool:使用 jasmine-node 和 jsdom 的功能性前端 Ext.JS 测试自动化工具

    茉莉花节点jsdom-extjs-testing-tool 使用 jasmine-node 和 jsdom 的功能性前端 Ext.JS 测试自动化工具如果您已经安装了节点包模块( ),安装将为您获取所需的库。Ext.JS 设置使用 Ext.JS 包并遵循 Sencha cmd 企业...

    extjs中的xtype的所有类型介绍

    ExtJS 中的 xtype.typename 介绍 ExtJS 中的 xtype 是一个非常重要的概念,它用于定义组件的类型,从而确定组件的行为和样式。xtype 是 ExtJS 的核心组件之一,它提供了大量的组件类型,满足不同场景下的需求。 ...

    Extjs4.0学习笔记

    Extjs4.0学习笔记,以下是部分介绍: xtjs4,创建Ext组件有了新的方式,就是Ext.create(....),而且可以使用动态加载JS的方式来加快组件的渲染,我们再也不必一次加载已经达到1MB的ext-all.js了,本文介绍如何在EXTJS4...

    extjs-620-docs.zip

    extjs-620-docs官方文档extjs-620-docs官方文档extjs-620-docs官方文档

    ExtJS笔记----FormPanel的使用

    NULL 博文链接:https://lucky16.iteye.com/blog/1490278

    ExtJs学习例子:多级联动下拉菜单演示例子

    前台采用ExtJs 2.2.1编写(由于库文件比较大,考虑到大家本机都有了,所以在此没有上传,大家直接改一下路径即可),后台采用asp+access编写(看文件名就知道了). 本例子演示的4级联动菜单:州+国家+城市+地区

    extjs-theme-bootstrap

    "extjs-theme-bootstrap" 是针对 EXTJS4 的一个主题,它借鉴了 Bootstrap 的设计风格,让 EXTJS4 应用程序具有更加现代化和一致的外观。 Bootstrap 是一个流行的前端开发框架,由 Twitter 推出,主要用于构建响应式...

    extjs6.2 admin-dashboard模板

    ExtJS 6.2是Sencha公司开发的一款强大的JavaScript框架,专门用于构建企业级的Web应用程序。Admin Dashboard模板则是ExtJS 6.2中的一个重要组件,它为开发者提供了一个现成的、完整的管理界面框架,方便快速搭建后台...

    extjs2----关于extjs 的使用,操作

    描述中提到内容较为初级,适合初学者学习,这表明我们将探讨的是ExtJS的基础概念和常用组件。 首先,让我们来了解一下ExtJS的核心概念。ExtJS基于组件模型,允许开发者构建复杂的用户界面,这些组件可以是按钮、...

    ExtJS快速入门--传智播客--蔡世友

    ExtJS快速入门--传智播客--蔡世友

    extjs 自动补全 模拟combobox

    EXTJS并没有直接提供一个名为"自动补全"的组件,但它可以通过模拟Combobox组件来实现这一效果。Combobox是EXTJS中的一个下拉选择框,它可以显示一个下拉列表供用户选择,同时也可以配合自动补全功能。 首先,让我们...

Global site tag (gtag.js) - Google Analytics