Ext.js 4 部分基础内容学习记录

Ext.js 4 部分内容
  1. 使用方法

    下载后直接将Ext.js文件夹引入项目表现层目录中

  2. 命名约定

    名称命名约定
    类名大写开头,驼峰
    方法名小写开头,驼峰
    变量名小写开头,驼峰
    常量名全部大写
    属性名小写开头,驼峰

    创建一个类

    Ext.define('StudentDataModel', {
             extend: 'Ext.data.Model',
             fields: [
             {name: 'name', mapping : 'name'},
             {name: 'age', mapping : 'age'},
             {name: 'marks', mapping : 'marks'}
             ]
          });
    
  3. 基础

    Ext.onReady()方法将在Ext JS准备好渲染Ext JS:元素时调用。
    Et.create()方法用于在Ext JS中创建对象,这里我们创建一个简单的面板类Ext.Pane的对象。
    Ext.Panel是Ext JS中用于创建面板的预定义类。
    每个Ext JS类都有不同的属性来执行一些基本的功能。

    Ext.Panel类有以下各种属性:
    renderTo是此面板必须星现的元素。
    Height和宽度属性用于提供面板的自定义尺寸。
    Title属性是为面板提供标题。
    Html属性是要在面板中显示的html内容。

  4. 容器

    EtJS中的容器是我们可以添加其他容器或子组件的组件。
    这些容器可以具有多个布局以将部件布置在容器中。
    我们可以从容器和其子元素添加或删除组件。
    EXt.container.Container是Ext JS中所有容器的基类。

    容器中放组件

    var component1 = Ext.create('Ext.Component', {
          html:'First Component'
       });
       Ext.create('Ext.container.Container', {
          renderTo: Ext.getBody(),
          items: [component1]
       });
    

    容器中放容器

    var component1 = Ext.create('Ext.Component', {
          html:'First Component'
       });
       Ext.create('Ext.container.Container', {
          renderTo: Ext.getBody(),
          items: [component1]
       });
    

    常用容器类型

    // Ext.panel.Panel
    //普通的容器
    Ext.create('Ext.panel.Panel', {
       items: [child1, child2]
       // this way we can add differnt child elements to the 
       //container as container items.
    });
    
    // Ext.form.Panel
    // 表单容器,提供有表单相关功能
    Ext.create('Ext.form.Panel', {
       items: [child1, child2] 
       // 这样我们可以将不同的子元素作为容器项添加到容器中。
    });
    
    //Ext.tab.Panel
    //包含多个选项卡的容器
    Ext.create('Ext.tab.Panel', {
       items: [child1, child2] 
       // 这样我们可以将不同的子元素作为容器项添加到容器中。
    });
    
    //Ext.container.Viewport
    //顶级应用容器,可以根据实际窗口大小自动调整
    Ext.create('Ext.container.Viewport', {
       items: [child1, child2] 
       // 这样我们可以将不同的子元素作为容器项添加到容器中。
    });
    

5.容器布局

名称作用
绝对定位 absolute允许使用坐标进行定位
手风琴定位 accordion允许一个项目叠在另一个项目上,类似于折叠
锚点定位 Anchor可以根据父容器的大小,作为基准,来相对调节自身大小
边框布局 border将整个页面划分为五个区域(east, south, west, north, center),可以为容器内组件指定在哪个区域
自动布局 auto默认的布局方式,根据容器内元素大小自动布局,容器大小会根据组件大小调整
card_panel布局此布局允许使用容器中的XY坐标定位项目,定位tab中内容的位置
card_wizard布局向导,每次只显示一个组件,底部有导航按钮
列布局 column将容器的分成列显示
自适应布局 fit容器内组件没有要求时,会尽可能填充容器空间,容器空间是固定的
表格布局 table组件将会以表格形式排列,同时组件还有colspan/rowspan属性,可以设置占几行/几列
vbox布局此布局允许元素以垂直方式分布
hbox布局此布局允许元素以水平方式分布

6.组件

  • grad 网格

    //定义一个类,name属性表示字段的名称,mapping属性表示与后端数据模型对应的字段名称
          Ext.define('StudentDataModel', {
             extend: 'Ext.data.Model',
             fields: [
             {name: 'name', mapping : 'name'},
             {name: 'age', mapping : 'age'},
             {name: 'marks', mapping : 'marks'}
             ]
          });
    
          Ext.onReady(function(){
             // 数据
             var myData = [
                { name : "Asha", age : "16", marks : "90" },
                { name : "Vinit", age : "18", marks : "95" },
                { name : "Anand", age : "20", marks : "68" },
                { name : "Niharika", age : "21", marks : "86" },
                { name : "Manali", age : "22", marks : "57" }
             ];
             //网格数据对象
             var gridStore = Ext.create('Ext.data.Store', {
             model: 'StudentDataModel',
             data: myData
             });
             // 网格
             Ext.create('Ext.grid.Panel', {
                id                : 'gridId', //唯一标识
                store             : gridStore,
                stripeRows        : true, //是否交替显示行背景色
                title             : 'Students Grid', // 网格名
                renderTo          :'gridDiv', // 显示的模块
                width             : 600,
                collapsible       : true, // 是否支持折叠网格
                enableColumnMove  :true, //是否允许拖动列调整列位置
                enableColumnResize:true, // 是否允许通过拖动调整列宽度
                columns           :  //指定网格的列配置
                   [{ 
                      header: "Student Name",
                      dataIndex: 'name',	
                      id : 'name',    
                      flex:  1,  		 //使用弹性布局来定义该列占据的空间比例,值为1,表示将获得所有可用空间的一部分	
                      sortable: true, // 允许对该列的数据进行排序
                      hideable: true  // 允许用户在运行时隐藏该列
                   },{
                      header: "Age", 
                      dataIndex: 'age',
                      flex: .5, 
                      sortable: true,
                       hideable: false // this column will not be available to be hidden.
                   },{
                      header: "Marks",
                      dataIndex: 'marks',
                      flex: .5, 
                      sortable: true, 
                      //通过renderer属性设置了一个渲染函数,根据列中的值进行条件判断并返回相应的结果。如果marks大于75,则显示为"Distinction",否则显示为"Non Distinction"
                      renderer :  function (value, metadata, record, rowIndex, colIndex, store) {
                         if (value > 75) {
                            return "Distinction";	  
                         } else {
                            return "Non Distinction";
                         }
                      }
                }]
             });
          });
    
  • 表单

    常见xType

    类型作用
    文本域 Ext.Form.Field.Text用户可以输入文本内容,和文本区域功能相同,但是属性不同
    文本区域 Ext.form.field.TextArea。。。。可以使用vtype配置项来添加自定义的验证类型
    显示字段 Ext.form.Label显示一段文字
    日期字段 Ext.form.field.Date日期选择,包含日期选择器
    按钮 Ext.button.Button按钮
    单选按钮 Ext.form.field.Radio在所有选项中单选
    复选框checkbox Ext.form.field.Checkbox在所有选项中复选
    组合框 Ext.form.field.ComboBox下拉框
    时间字段 Ext.form.field.Time进行时间选择
    文件 Ext.form.field.File文件上传
    螺旋桨 Ext.form.field.Spinner列表可以旋转选择
    NUMERIC FIELD Ext.form.field.Number数字,可以限制范围
    隐藏字段在页面上隐藏的字段,可以用来存储传递敏感数据
  • 消息框

    类型效果
    基本警报框 Ext.Msg.alert(‘Title’, ‘Basic message box in ExtJS’);最为基本的消息提示框,只显示消息内容
    确认框 Ext.MessageBox.confirm(‘Confirm’, Msg, optional callbackFunction());可以根据用户选择(yes/no)做出相应选择
    提示框 Ext.Msg.prompt(‘Name’, ‘Please enter your name:’, function(){});用户可以输入,可以对用户输入文本进行处理
    多行输入框 Ext.MessageBox.show({ title: ‘Details’, msg: ‘Please enter your details:’, width:300, buttons: Ext.MessageBox.OKCANCEL, multiline: true, // this property is for multiline user input. fn: callbackFunction }); //fn为自动执行回调函数,不需要传参,会自动传递所需参数类似于提示框,但是允许多行输入
    是否取消框 同多行输入框 不同点buttons: Ext.MessageBox.YESNOCANCEL类似于确认框,根据用户选择回调函数进行处理
  • 图表 依赖‘./ext-6.0.0/build/packages/charts/classic/charts.js’

    类型效果
    饼图 Ext.chart.PolarChart
    Ext.create(‘Ext.chart.PolarChart’, {
    renderTo: document.body, // 将图表渲染到当前页面的 body 元素中
    width: 600, // 图表宽度为 600 像素
    height: 300, // 图表高度为 300 像素
    store: { // 图表数据源
    fields: [‘name’, ‘g1’], // 数据源字段定义,包括 name 和 g1 两个字段
    data: [ // 图表数据
    {“name”: “Item-0”, “g1”: 57},
    {“name”: “Item-1”, “g1”: 45},
    {“name”: “Item-2”, “g1”: 67}
    ] }, // 配置图例(legend)
    legend: { docked: ‘bottom’ // 将图例显示在底部 }, // 描述实际的饼图系列(series)
    series: [{ type: ‘pie’, // 使用饼图类型的系列
    xField: ‘g1’, // 指定饼图的数值字段为 ‘g1’
    label: { field: ‘name’ // 标签显示字段为 ‘name’ },
    donut: 30 // 中间空白区域的大小,增加或减小该值可以改变中间空白区域的大小
    }] });
    饼状图
    折线图 Ext.chart.CartesianChart
    Ext.create(‘Ext.chart.CartesianChart’, {
    renderTo: document.body,
    width: 600,
    height: 200,
    store: { //数据
    fields: [‘name’, ‘g1’, ‘g2’], //字段
    data: [ //数据
    {“name”: “Item-0”, “g1”: 57, “g2”: 59},
    {“name”: “Item-1”, “g1”: 45, “g2”: 50},
    {“name”: “Item-2”, “g1”: 67, “g2”: 43},
    {“name”: “Item-3”, “g1”: 45, “g2”: 18},
    {“name”: “Item-4”, “g1”: 30, “g2”: 90}
    ] },
    legend: { /图例
    docked: ‘bottom’ }, //显示位置
    axes: [{
    type: ‘numeric’, //纵坐标
    position: ‘left’ //位置
    },
    { type: ‘category’, //横坐标
    visibleRange: [0, 1],
    position: ‘bottom’ }], //define the actual series
    series: [{ //折线属性
    type: ‘line’,
    xField: ‘name’,
    yField: ‘g1’,
    title: ‘Normal’ },
    { type: ‘line’,
    xField: ‘name’,
    yField: ‘g2’,
    title: ‘Smooth’ }]
    });
    折线图
    条形图 Ext.chart.CartesianChart
    Ext.create(‘Ext.chart.CartesianChart’, {
    renderTo: document.body,
    width: 600,
    height: 200,
    flipXY: true, // X轴和Y轴互换
    store: {
    fields: [‘name’, ‘g1’, ‘g2’], // 定义数据模型字段
    data: [
    {“name”: “Item-0”, “g1”: 57, “g2”: 59},
    {“name”: “Item-1”, “g1”: 45, “g2”: 50},
    {“name”: “Item-2”, “g1”: 67, “g2”: 43},
    {“name”: “Item-3”, “g1”: 45, “g2”: 18},
    {“name”: “Item-4”, “g1”: 30, “g2”: 90}
    ]
    }, //set legend configuration
    legend: {
    docked: ‘right’ //设置图例显示在右侧
    }, //define the x and y-axis configuration.
    axes: [{
    type: ‘numeric’,
    position: ‘bottom’, /位置
    grid: true, //是否显示网格线
    minimum: 0 //数值显示的最小值
    }, {
    type: ‘category’,
    position: ‘left’
    }],
    series: [{
    type: ‘bar’, //柱状图
    xField: ‘name’,
    yField: [‘g1’, ‘g2’],
    axis: ‘left’
    }]
    });
    柱状图
    区域图 Ext.chart.CartesianChart
    Ext.create(‘Ext.chart.CartesianChart’, {
    renderTo: document.body,
    width: 600,
    height: 200,
    store: {
    fields: [‘name’, ‘g1’, ‘g2’],
    data: [
    {“name”: “Item-0”, “g1”: 57, “g2”: 59},
    {“name”: “Item-1”, “g1”: 45, “g2”: 50},
    {“name”: “Item-2”, “g1”: 67, “g2”: 43},
    {“name”: “Item-3”, “g1”: 45, “g2”: 18},
    {“name”: “Item-4”, “g1”: 30, “g2”: 90}
    ]
    },
    legend: { //图例位置
    docked: ‘right’
    },
    axes: [{
    type: ‘numeric’,
    position: ‘left’,
    grid: true //显示网格
    }, {
    type: ‘category’,
    position: ‘bottom’,
    visibleRange: [0,5] //设置可见数据范围
    }],
    series: [{
    type: ‘area’,
    xField: ‘name’,
    yField: [‘g1’, ‘g2’],
    title: [‘G1’, ‘G2’]
    }]
    });
  • 工具提示

    当发生特定事件时触发小提示

     T1 = new 'Ext.ToolTip'({properties});
    
  • 窗口

    渲染一个新的窗口

    win = new Ext.Window({ properties });
    
  • HTML编辑器

    Ext.create('Ext.form.HtmlEditor') 
    

    类似于wrod文档还包括多媒体等

  • 进度条


    ```javascript // 创建并配置一个按钮 var button = Ext.create('Ext.Button', { text: '点击开始', renderTo: Ext.getElementById('buttonId'), // 将按钮渲染到指定的 DOM 元素 handler: function() { // 点击按钮时执行的回调函数 // 显示一个带有进度条的对话框 Ext.MessageBox.show({ title: '进度', progress: true, // 启用进度条 closable: false // 禁止关闭对话框 });

    var progressBar = Ext.getCmp(‘progressbar’);

    // 模拟进度的增加
    var simulateProgress = function() {
    var value = progressBar.getValue();

    // 更新进度条的进度
    progressBar.updateProgress(value + 0.1, '正在处理任务 ’ + Math.round((value + 0.1) * 100) + ‘%’);

    if (value < 1) {
    // 继续增加进度,直到达到100%
    setTimeout(simulateProgress, 500); // 延迟时间可根据实际情况进行调整
    } else {
    // 进程完成,隐藏进度条对话框
    Ext.MessageBox.hide();

    // 显示一个提示框,表示进程已成功完成
    Ext.Msg.alert('完成', '任务已成功完成!');
    

    }
    };

    // 开始进度模拟
    simulateProgress();
    }
    });

    
    

7、拖放

8、主题

9、自定义事件、监听器

  • 内置事件监听器
listeners: {
                  click: function() {
                     Ext.MessageBox.alert('Alert box', 'Button is clicked');    
                  }
               }
  • 附加事件监听
var button = Ext.create('Ext.Button', {
               renderTo: Ext.getElementById('helloWorldPanel'),
            text: 'My Button'
            });

            // This way we can attach event to the button after the button is created.
            button.on('click', function() {
               Ext.MessageBox.alert('Alert box', 'Button is clicked');
            });
  • 自定义事件监听
var button = Ext.create('Ext.Button', {
               renderTo: Ext.getElementById('helloWorldPanel'),
               text: 'My Button',
               listeners: {
                  myEvent: function(button) {
                     Ext.MessageBox.alert('Alert box', 'My custom event is called');
                  }
               }
            });
            Ext.defer(function() { //延迟执行
               button.fireEvent('myEvent'); //触发自定义事件
            }, 5000);

10、数据

  • 模型

    创建一个模型

    Ext.define('StudentDataModel', {
          extend: 'Ext.data.Model',
          fields: [
          {name: 'name', mapping : 'name'},
          {name: 'age', mapping : 'age'},
          {name: 'marks', mapping : 'marks'}
          ]
       });
    
  • 商店

    //静态
    Ext.create('Ext.data.Store', {
          model: 'StudentDataModel',
          data: [
             { name : "Asha", age : "16", marks : "90" },
             { name : "Vinit", age : "18", marks : "95" },
             { name : "Anand", age : "20", marks : "68" },
             { name : "Niharika", age : "21", marks : "86" },
             { name : "Manali", age : "22", marks : "57" }
          ];
       });
    
  • 代理

    //可以动态的获取数据
    Ext.create('Ext.data.Store', {
       model: 'StudentDataModel',
       proxy : {
          type : 'rest',
          actionMethods : {
             read : 'POST'  // Get or Post type based on requirement
          },
          url : 'restUrlPathOrJsonFilePath', // here we have to include the rest URL path which fetches data from database or Json file path where the data is stored
          reader: {
             type : 'json',  // the type of data which is fetched is of JSON type
             root : 'data'
          },
       }
    });
    
    

11、方法

//创建数据映射对象,//RU_DATE,RU_DETAIL,RU_FINSHER,RU_OA_ORDERID,RU_USER
Ext.define(‘RuRecordDataModel’, {
extend: ‘Ext.data.Model’,
fields: [
{ name: ‘RU_FINSHER’, mapping: ‘RU_FINSHER’ },
{ name: ‘RU_DETAIL’, mapping: ‘RU_DETAIL’ },
{ name: ‘RU_DATE’, mapping: ‘RU_DATE’ }
]
});
//创建网格对象
var gridStore = Ext.create(‘Ext.data.Store’, {
model: ‘RuRecordDataModel’,
data: rsp.ruRecord
});

                var gridPanel = Ext.create('Ext.grid.Panel', {
                    store: gridStore,
                    stripeRows: true,
                    title: '上周系统更新记录',
                    width: 600,
                    collapsible: true,
                    enableColumnMove: true,
                    enableColumnResize: true,
                    columns: [{
                        header: "更新人员",
                        dataIndex: 'RU_FINSHER',
                        id: 'RU_FINSHER',
                        flex: 1,
                        sortable: true,
                        hideable: false
                    }, {
                        header: "更新内容",
                        dataIndex: 'RU_DETAIL',
                        flex: .5,
                        sortable: true,
                        hideable: false
                    }, {
                        header: "更新日期",
                        dataIndex: 'RU_DATE',
                        flex: .5,
                        sortable: true,
                        hideable: false
                    }]
                });

                var window = Ext.create('Ext.window.Window', {
                    title: '上周系统更新记录',
                    layout: 'fit',
                    modal: true,
                    items: [gridPanel]
                });
                window.show();

             var ds = new Ext.data.JsonStore({
                    url: '../Post/MesBas/DevicePanel.aspx', root: 'data', totalProperty: 'totalCount',
                    fields: ['CUST_ID', 'DEVICE_ID', 'CUST_NAME', 'DEVICE_NO', 'FAB_DEVICE', 'CUST_DEVICE', 'SHIP_DEVICE', 'DEVICE_TYPE', 'TYPE_NAME', 'DEVICE_OWNER', 'OWNER_NAME', 'GROUP_NAME', 'PROCESS_ID', 'PROCESS_NAME', 'REMARK', 'STATUS', 'PROCESS_CP', 'CREATOR_NAME', 'REVISER_NAME', { name: 'CREA_DATE', type: 'date' }, { name: 'REVISE_DATE', type: 'date' }],
                    listeners: {
                        'beforeload': function () { this.baseParams = { start: 0, limit: Grid.getBottomToolbar().pageSize, DEVICE_NO:'', STATUS: 'Y', CUST_ID:'', TASK_IF: ''} }
                    }
                });
                //显示列
                var cm = new Ext.grid.ColumnModel({
                    defaults: { align: 'center', width: 120 },
                    columns: [ { header: '客户名称', dataIndex: 'CUST_NAME' }, { header: '产品型号', width: 150, dataIndex: 'DEVICE_NO' },
                        { header: '客户型号', dataIndex: 'CUST_DEVICE' }, { header: '晶圆型号', width: 150, dataIndex: 'FAB_DEVICE' },
                    ]
                });
            var Grid = new MyGrid({
                store: ds, cm: cm, iconCls: '', columnLines: true, trackMouseOver: false
            });

            new Ext.Window({
                title: '产品选择', width: 500, height: 550, plain: true, iconCls: 'right', resizable: false, collapsible: true, closeAction: 'close', closeable: true, modal: true, layout: 'fit', buttonAlign: 'right',
                items: Grid, buttons: [
                { text: '已查阅', iconCls: 'back', handler: function () { this.ownerCt.findParentByType('window').close(); } }],
                listeners: { 'show': function (it) { ds.load(); } }
            }).show();

添加元素

store.insert(index,newRecord),在指定位置添加一行新数据

stroe.add(newRecord),在尾部追加新记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值