ExtJs实践

假如我们程序中有产品(Product)和产品分类(Category)这2个类,前端使用 ExtJs,通过JSON格式同后端进行通讯:

public class  Category 
{
  public string Id { get; set; }
  public string Name { get; set; }
}
 
public  class Product 
{
  public string Id { get; set;  }
  public string Name { get; set; }
  public  Category Category { get; set; }
}

在产品添加页 面,会有一个ComboBox来选择产品所属的分类(当然实际工作中产品的Id是不会 让用户输入的):

如果使用ExtJs传统的ComboBox:

Ext.onReady (function() {
      Ext.QuickTips.init();
       var store = new Ext.data.ArrayStore({
         fields: ['Id', 'Name'],
        data:  [['1', '产品分类一'], ['2', '产品分类二 ']]
      });
      var form = new  Ext.FormPanel({
        labelWidth: 75,
         frame: true,
        title:  'ComboBox',
        bodyStyle: 'padding:5px  5px 0',
        width: 350,
         defaults: { width: 230 },
        defaultType:  'textfield',
        items: [
         { fieldLabel: '产品Id',
          name:  'Id'
        }, { fieldLabel: '产品名称 ',
          name: 'Name'
         }, new Ext.form.ComboBox({
           fieldLabel: '产品分类',
          name:  'Category',
           hiddenName:'CategoryId',
          store:  store,
          displayField: 'Name',
           mode: 'local',
           valueField: 'Id'
        })
],
         buttons: [{
          text: '保存 ',
          handler: function() {
             var values = form.form.getValues();
             alert(Ext.util.JSON.encode(values));
           }
        }
]
      });
       form.render(document.body);
    });

时间: 2024-09-20 00:44:59

ExtJs实践的相关文章

ExtJs实践:支持“复杂”Json的JsonReader

从服务端返回如下的JSON: {Id:2,Name:'Child1',Parent:{Id:1,Name:'Parent'}} 定义了如下的JsonReader来准备显示角色列表,父角色的名称影射成ParentName: var myReader = new Ext.data.JsonReader({ idProperty: 'id' root: 'rows', totalProperty: 'results', fields: [ {name: 'Id'}, {name: 'Name'}, {

《ExtJS详解与实践》阅读补充资料:单页面应用程序的设计

在一般的Web GUI 中,每个应用都分散在一个页面中,会随着页面的跳转而反映在浏览器的地址栏上:稍微复杂的基于Web 系统中,都采用划分Frame 元素或打开浏览器新窗口的方式来组织页面,从浏览器的地址看起来,虽然只有一个地址,但是子Frame 的页面还是会整张页面地刷新.AJAX 改变了以往一张页面一次请求的模式,可以允许在同一张页面发起各种的请求,这样我们对于页面的组织形式有了新的途径.在单页面GUI 模型中,主页面是可以独立加载.更新和替换的一些可视元素的组合.通过这种方式,可以不必在每

《ExtJS 3详解与实践》阅读补充资料:编写Hello World

    使用Ext编写Ajax应用程序时,初学者往往都会感到迷惑:到底应该怎样编写Ajax程序?事实上,每个初学者都会遇到这种情况--不知该如何下手,有时只是因为一点点设置不对就卡住了整个程序的运行,连HelloWorld也可能成为新手的拦路虎.为了帮助新手尽快消除这种困惑,我们这里先为新手准备一份详尽的启动文件清单,说明清楚运行该框架的最基本条件到底是哪些:然后再简单地跑一趟对话框MessageBox作为Hello World.首先是对这份HTML文件的详解:   <!-- 标识html开始

《ExtJS 3详解与实践》阅读补充资料:Ext.extend()中使用super关键字

  既然一门语言被精简了,无论idea还是直观的语法,都务求精简的话,那么这便无形就是一个趋势,趋势往往不为人们的意志转移地转为自己的习惯,思维定性的习惯,连function这个关键字也有某仁兄觉得太长了,有缩减的必要.当然这只是开玩笑而已了.   好像Lisp那样满天 点号.冒号便是灾难.用过Ext继承的人都清楚,每每调用父类成员的时候就是Ext.subClass.superclass.methodName.call/apply(this).一整串的长,好处也是明显的,起码这种完全命名方式一个

《ExtJS 3详解与实践》阅读补充资料:capture()捕获事件

静态方法Ext.util.Observable.capture()是一项有趣的功能,它能够将一项事件进行捕获,跟踪该事件发生的经过.捕获事件就是观察Ext JS事件的调用过程.只要是继承了 Ext.util.Observable的组件,调用capture(),便可得知该组件何时何地怎样响应事件,也算是调试组件时的技巧. // 假设已有一个名为'myWindow'的UI组件,用Ext.getCmp()返回该对象. Ext.util.Observable.capture(Ext.getCmp('my

《ExtJS详解与实践》阅读补充资料:Grid如何高/宽自适应

Grid高度自适应是许多用户开发过程中碰到过的问题.问题在于,尽管本类是由Panel类继承而得到的,但是不支持其基类的某些功能,所以不能都做到好像一般Panel类那样的方法来解决,如autoScroll.autoWidth.layout.items等-- Grid需要指定一个宽度来显示其所有的列,也需要一个高度来滚动列出所有的行.这些尺寸都通过配置项BoxComponent.height和Ext.BoxComponen.width来精确的指定,又或者将Grid放置进入一个带有某种布局风格的容器中

《ExtJS 3详解与实践》阅读补充资料:用BoxComponent制作Logger UI

如果要求的UI控件不需要其他的细节的控件,也就是,仅仅是封装某部分的HTML元素的话,还要听凭布局管理器提供的大小尺寸.布局的调控,那么这个的扩展对象就是Ext.BoxComponent.例如,假设一个Logger类打算是简单地显示log信息,就可以这样定义: Ext.ns('Ext.ux.Logger'); Ext.ux.Logger = Ext.extend(Ext.BoxComponent, { tpl: new Ext.Template("<li class='x-log-entr

Extjs框架简介

序言 ExtJS是一种主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架. 功能丰富,无人能出其右 无论是界面之美,还是功能之强,ext的表格控件都高居榜首. 单选行,多选行,高亮显示选中的行,推拽改变列宽度,按列排序,这些基本功能咱们就不提了. 自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能. 再加上可编辑grid,添加新行,删除一或多行,提示脏数据,推拽改变grid大小,grid之间推

ExtJs 备忘录(6)—— GirdPanl表格(二) [ 搜索分页 ]

前言 近些天对于厚积薄发有深刻的理解,尤其是月末那两天,很想再写两篇文章,保持每周一篇--每月至少四篇以上的文章.写文章分两种情况:一种情况是已经积累了许多经验,写起来轻松且得心应手,内容和系列文章容易把握,最典型的就是视频监控的那系列文章,得以写完是因为已经从事近半年相关的开发工作;另一种情况则是有方向但积累不足甚至无积累,边学边实践,然后进行归类和总结成系列,比如视频监控第二个系列和本系列都属于这种情况,如果时间稍微充足且过程较为顺利,尚可勉强完成,反之则遥遥无期.由此感悟,下次写系列文章还