频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源:pcdog 作者:佚名 出处:巧巧读书 2008-01-03 进入讨论组
上一页 1 2 

  接下来我们要进行事件处理:


   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即可

转 载:http://www.qqread.com/aspdotnet/r390240.html进入讨论组讨论。
上一页 1 2 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章