当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  请跟我来--使用Ext搞个原型

 请跟我来--使用Ext搞个原型

点击次数:22 次 发布日期:2008-11-26 22:36:38 作者:源代码网
源代码网推荐     
源代码网推荐   Ext本身就带有比较专业和酷的示例,这也是Ext明显强过其他js框架的地方,所以大家最好少看那些简单翻译一下就发表的示例,实在是浪费时间。关于一些高级的用法,最佳方式就是看源码和其他比较好的扩展控件写法,当然园子里有几篇原创的Ext入门文章,看看也是有好处的。
源代码网推荐   为了运行下面的例子,请下载ext2.0,实际上我的例子也是从form-grid等例子修改而来的。
源代码网推荐   会员分组统计界面如下:
源代码网推荐  
源代码网推荐  数据维护界面如下:
源代码网推荐  
源代码网推荐  说明:做过C/S数据应用的程序员都明白,我们一般会定义数据源,然后再将其绑定到界面组件上。在EXT中,如果要测试界面组件是否正确,则用以下几行就能轻松搞定了:
源代码网推荐  var myData = [
源代码网推荐   ["1","alex","lsj@21cn.com","13226612334",1995,"2007-10-20 10:00:00"],
源代码网推荐   ["2","tom","tom@21cn.com","13826782334",1996,"2007-10-20 10:00:00"],
源代码网推荐   ["3","cx8","cx@163.com", "139250802541",1999,"2008-11-12 08:00:00"]
源代码网推荐   ];
源代码网推荐   var ds = new Ext.data.Store({
源代码网推荐   reader: new Ext.data.ArrayReader({},[
源代码网推荐   "id","Name","Email","Mobile",//通常的字符型可简单定义
源代码网推荐   {name: "GradYear", type: "int"},
源代码网推荐   {name: "sCreatedDate", type: "date", dateFormat: "Y-m-d H:i:s"}
源代码网推荐   ])
源代码网推荐   });
源代码网推荐   ds.loadData(myData);
源代码网推荐  要同时绑定到数据列表组件和编辑组件则可以如下办理:
源代码网推荐  var gridForm = new Ext.FormPanel({
源代码网推荐   id: "member-form",frame: true, labelAlign: "left",
源代码网推荐  layout: "column", // 以列方式布局
源代码网推荐  ……
源代码网推荐   items: [{
源代码网推荐   columnWidth: 0.6,layout: "fit",//左边列放列表
源代码网推荐   items: {
源代码网推荐   xtype: "grid", ds: ds, cm: colModel, sm: rsm,id:"member-grid",
源代码网推荐   title:"会员列表", border: true, stripeRows: true, frame: true, height: 450,
源代码网推荐   ……
源代码网推荐   }
源代码网推荐   },{
源代码网推荐   xtype: "fieldset",columnWidth: 0.4,//右边列放编辑板
源代码网推荐   ……,
源代码网推荐   items: [
源代码网推荐   {fieldLabel:"姓名",name: "Name",allowBlank: false,minLength:3,maxLength:8,anchor:"90%"},
源代码网推荐   {fieldLabel:"邮件",name: "Email",vtype:"email",anchor:"90%"},
源代码网推荐   {fieldLabel:"手机",name: "Mobile",anchor:"90%"},
源代码网推荐   {fieldLabel:"毕业年份",name: "GradYear",xtype:"numberfield",anchor:"90%",value: "2008"},
源代码网推荐   {fieldLabel:"登记日期",name: "sCreatedDate", xtype:"datefield",format: "Y-m-d H:i:s", anchor:"90%"}
源代码网推荐   ],
源代码网推荐  ……
源代码网推荐  
源代码网推荐  
源代码网推荐  接下来我们要进行事件处理:
源代码网推荐  
源代码网推荐  
源代码网推荐   1) 列表当前选择记录和编辑框同步:
源代码网推荐   var rsm=new Ext.grid.RowSelectionModel({
源代码网推荐   singleSelect: true,
源代码网推荐   listeners: {
源代码网推荐   rowselect: function(sm, row, rec) {
源代码网推荐   Ext.getCmp("member-form").getForm().loadRecord(rec);
源代码网推荐   }
源代码网推荐   }
源代码网推荐   });
源代码网推荐  ……
源代码网推荐  buttons: [
源代码网推荐   {text: "修改",handler:function(){
源代码网推荐   var frm=Ext.getCmp("member-form").getForm();
源代码网推荐   if(frm.isValid()) frm.updateRecord(rsm.getSelected()); //把右边编辑过的数据更新到左边的列表
源代码网推荐   }
源代码网推荐   },
源代码网推荐   {text: "清空",handler:function(){
源代码网推荐   var frm=Ext.getCmp("member-form").getForm();
源代码网推荐   frm.reset();
源代码网推荐   }
源代码网推荐   }
源代码网推荐   ]
源代码网推荐  
源代码网推荐  2) 新增记录到缓存:
源代码网推荐  function addNew() {
源代码网推荐   var r=rsm.getSelected().copy();
源代码网推荐   r.data["id"]="";r.data["Name"]="???";
源代码网推荐   var grid=Ext.getCmp("member-grid");
源代码网推荐   grid.stopEditing();
源代码网推荐   ds.insert(0, r);
源代码网推荐   ds.commitChanges();
源代码网推荐   grid.getView().refresh();
源代码网推荐   }
源代码网推荐  3) 从缓存中删除一条记录:
源代码网推荐   function deleteRec() {
源代码网推荐   if(rsm.getCount()<1) return;
源代码网推荐   var r=rsm.getSelected();
源代码网推荐   var grid=Ext.getCmp("member-grid");
源代码网推荐   grid.stopEditing();
源代码网推荐   ds.remove(r);
源代码网推荐   ds.commitChanges();
源代码网推荐   grid.getView().refresh();
源代码网推荐   }
源代码网推荐  要个性化显示也很简单,比如我们把1998年前毕业的用红色,否则用绿色标记:
源代码网推荐   function myRenderer(val){
源代码网推荐   if(val > 1998)
源代码网推荐   return "<span style="color:green;">" + val + "</span>";
源代码网推荐   return "<span style="color:red;">" + val + "</span>";
源代码网推荐   }var colModel = new Ext.grid.ColumnModel([
源代码网推荐   ……,
源代码网推荐   {header: "毕业年份", width: 65, sortable: true, renderer: myRenderer, dataIndex: "GradYear"},
源代码网推荐   ……
源代码网推荐   ]);
源代码网推荐  
源代码网推荐   我们从使用中看出Ext设计十分灵活,让我有当初使用Delphi的那种爽的感觉!Ext的数据模型还是比较简单易懂的,基本可以应付常见的应用,我们也看到对于新增加的记录,它还缺乏一些状态,就不如.NET框架中DataSet中那么强有力。可能是要考虑不能太过于复杂,否则js框架就太大了,毕竟是要下载到客户端去的。但是我们仍然可以想一些办法区分,比如:r.data["id"]="";这样我们在后台就可以知道这是新增加的记录。
源代码网推荐   再看看统计则要用扩展的分组统计组件。定义数据源稍微有些变化,多了几点:
源代码网推荐  function createGroupingStore(){
源代码网推荐   var myData = [
源代码网推荐   ["1","alex","lsj@21cn.com","13226612334",1995,"2007-10-20 10:00:00"],
源代码网推荐   ["2","tom","tom@21cn.com","13826782334",1995,"2007-10-20 10:00:00"],
源代码网推荐   ["3","cx8","cx@163.com", "139250802541",1999,"2008-11-12 08:00:00"]
源代码网推荐   ];
源代码网推荐   var ds = new Ext.data.GroupingStore({
源代码网推荐   reader: new Ext.data.ArrayReader({},[
源代码网推荐   "id","Name","Email","Mobile",
源代码网推荐   {name: "GradYear", type: "int"},
源代码网推荐   {name: "sCreatedDate", type: "date", dateFormat: "Y-m-d H:i:s"}
源代码网推荐   ]),
源代码网推荐   groupField: "GradYear",
源代码网推荐   remoteSort: false
源代码网推荐   });
源代码网推荐   ds.setDefaultSort("sCreatedDate","DESC");
源代码网推荐   ds.loadData(myData);
源代码网推荐   return ds;
源代码网推荐  }
源代码网推荐  
源代码网推荐  var xg = Ext.grid;
源代码网推荐   var ds= createGroupingStore();
源代码网推荐   var rsm = new xg.CheckboxSelectionModel();
源代码网推荐   var summary = new Ext.grid.GroupSummary();
源代码网推荐   var grid = new xg.GridPanel({
源代码网推荐   ds: ds,
源代码网推荐   columns: [ rsm,
源代码网推荐   {
源代码网推荐   header: "姓名", width: 60, sortable: true, dataIndex: "Name",summaryType: "count",
源代码网推荐   summaryRenderer: function(v, params, data){
源代码网推荐   return ((v === 0 || v > 1) ? "(" + v +" 人)" : "(1 人)");
源代码网推荐   }//自定义汇总处理
源代码网推荐   },
源代码网推荐   {header: "邮件", width: 175, sortable: true, dataIndex: "Email"},
源代码网推荐   {header: "手机", width: 125, sortable: true, dataIndex: "Mobile"},
源代码网推荐   {header: "毕业年份", width: 200, sortable: true, dataIndex: "GradYear"},
源代码网推荐   {header: "登记日期", width: 85, sortable: true, summaryType: "max",renderer: Ext.util.Format.dateRenderer("Y/m/d"), dataIndex: "sCreatedDate"}
源代码网推荐   ],
源代码网推荐   sm:rsm,
源代码网推荐   view: new Ext.grid.GroupingView({
源代码网推荐   forceFit:true,
源代码网推荐   showGroupName: true,
源代码网推荐   hideGroupedColumn: true
源代码网推荐   }),
源代码网推荐   plugins: summary,
源代码网推荐   frame:true,width: 800,height: 450,clicksToEdit: 0,
源代码网推荐   collapsible: true, animCollapse: false,trackMouseOver: false,
源代码网推荐   enableColumnMove: false,title: "分组列表",
源代码网推荐   iconCls: "icon-grid",
源代码网推荐   renderTo: document.body
源代码网推荐   });
源代码网推荐  
源代码网推荐  OK,有点感觉了吗?最好下载demo实际运行一下,请把例子解压到ext2.0/examples/demo目录,运行那form.html以及group.html即可
源代码网推荐  
源代码网推荐  聪明的读者肯定就要问,那如何实际从数据库中加载数据并且提交修改数据回数据库呢?那就请听下回分解吧。
源代码网推荐  
源代码网推荐  Alex
源代码网推荐  
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华