精华内容
下载资源
问答
  • Extjs 5

    2014-07-11 09:53:27
    原文:Designing Responsive Applications with Ext JS ...在当今这个时代,用户都希望Web应用程序...幸运的是,Ext JS 5提供了所有支持应用程序以符合任何屏幕尺寸、形状和方向的工具。 responsiveConfig概

    原文:Designing Responsive Applications with Ext JS




    在当今这个时代,用户都希望Web应用程序无论在形状还是大小上,既能在桌面电脑,也能在移动设备上使用。使应用程序能适应不同的需求渐成趋势。幸运的是,Ext JS 5提供了所有支持应用程序以符合任何屏幕尺寸、形状和方向的工具。


    responsiveConfig概述

    要让Ext JS 5支持新的平板电脑,需要使用“responsiveConfig”,一个强大的新功能,可以让应用程序根据屏幕大小和方向进行动态响应。使用以下两个类其中之一就可以启用responsiveConfig:

    • Ext.plugin.Responsive: 为Ext.Component添加响应能力
    • Ext.mixin.Responsive: 为其他类添加响应能力


    在组件中实现响应

    处于性能原因,Ext JS组件默认是没有开启响应功能的,因此,如果要让组件启用响应功能,需要使用响应插件。将响应插件添加到类内,就可以让所以实例实现响应,或者将它添加到实例的配置对象中以咋单个组件实例中开启响应功能:

    [javascript] view plaincopy在CODE上查看代码片派生到我的代码片
    1. plugins: 'responsive'  

    一旦将响应插件添加到组件的配置对象,组件就会得到一个名为responsiveConfig的配置项。responsiveConfig只是一个包含响应条件的对象,可将满足条件的配置应当到显示,例如,假设应用程序中有一个标签面板,而预期标签栏在横向模式时显示在左边,在垂直模式时则显示在顶部,这时,可使用“landscape”和“portrait”作为responsiveConfig对象的键来动态设置面板的tabPosition配置项以响应设备方向的变化:
    [javascript] view plaincopy在CODE上查看代码片派生到我的代码片
    1. Ext.define('MyApp.view.Main', {  
    2.     extend: 'Ext.tab.Panel',  
    3.     plugins: 'responsive',  
    4.     responsiveConfig: {  
    5.         landscape: {  
    6.             tabPosition: 'left'  
    7.         },  
    8.         portrait: {  
    9.             tabPosition: 'top'  
    10.         }  
    11.     },  
    12.     items: [  
    13.         { title: 'Foo' },  
    14.         { title: 'Bar' }  
    15.     ]  
    16. });  

    规则


    在responsiveConfig对象中的每一个键,或规则,只是一个简单的javascript表达式。以下变量可用来作为responsiveConfig对象的规则:

    •     ‘landscape’ - 如果设备方向是竖向的,则为true (在桌面设备总是为true)
    •     ‘portrait’ - 如果设备方向是横向的,则为true(在桌面设备总是为false)
    •     ‘tall’ - 无论任何设备,只要宽度小于高度,则为true
    •     ‘wide’ - 无论任何设备,只要宽带大于高度,则为true
    •     ‘width’ - viewport的宽度
    •     height’ - viewport的高度


    可以以不同的方式来组合这些变量来创建复杂的响应规则,例如,以下responsiveConfig会在viewport宽度少于768像素且高度大于它的宽度时隐藏组件:

    [javascript] view plaincopy在CODE上查看代码片派生到我的代码片
    1. responsiveConfig: {  
    2.     'width < 768 && tall': {  
    3.         visible: true  
    4.     },  
    5.     'width >= 768': {  
    6.         visible: false  
    7.     }  
    8. }  

    哪一个配置会被响应?

    在内部,框架会监控viewport的大小和方向的变化,并在任何这些事件发生时,重新计算所有的响应规则。在配置中的任何匹配的规则都会调用修改方法(setter),这意味着,对于用在responsiveConfig中的配置项,它必须有一个修改方法,如在以上示例中能使用visible,是因为Ext.Component有一个setVisible方法。


    让类响应


    responsiveConfig通常是用于组件的,不过有时可能需要让类根据屏幕大小做出响应。对于非Ext.Component的类,可通过混入 Ext.mixin.Responsive来实现,例如,以下类的实例会在屏幕形状从tall变为wide时更新foo的值,反之亦然。


    [javascript] view plaincopy在CODE上查看代码片派生到我的代码片
    1. Ext.define('MyClass', {  
    2.     mixins: ['Ext.mixin.Responsive'],  
    3.     config: {  
    4.         foo: null  
    5.     },  
    6.     responsiveConfig: {  
    7.         wide: {  
    8.             foo: 1  
    9.         },  
    10.         tall: {  
    11.             foo: 2  
    12.         }  
    13.     },  
    14.     constructor: function(config) {  
    15.         this.initConfig(config);  
    16.     },  
    17.     updateFoo: function(foo) {  
    18.         console.log(foo); // logs "1" or "2" as screen shape changes between wide and tall  
    19.     }  
    20. });  

    试一试


    为了确保使用Ext JS新的响应式设计特性所设计的真实应用程序能经得起考验,我们创建了一个利用responsiveConfig以适应桌面与平板等广泛屏幕尺寸和方向的应用程序,该应用程序可在这里下载

    试着调整桌面浏览器窗口的大小或旋转平板电脑,并观察以下应用程序的表现和布局变化:

    在wide模式,主导航将会定位在左边,而咋top模式在定位在顶部。
    在tall模式,标签的图标会对齐于顶部,而在wide模式会对齐于左边。
    在tall模式,标签文本将会居中显示,而在wide模式将会对齐于左边。
    在tall模式,屏幕对于导航栏来说会变得很窄,这时,将会显示溢出菜单工具,并将导航条目显示在菜单中。

    我们确信Ext JS 5的这些新特性将会使跨设备应用程序的开发变得容易,我们希望你们去试一下。说不定,这会很有乐趣!


    作者:Phil Guerrant
    Phil is a Sencha software engineer who works on Ext JS. He has over 10 years of experience as a developer and specializes in HTML5 and web development, UI, and agile methodologies.
    展开全文
  • extjs 5

    2013-07-12 10:45:59
    上篇中我们简单的谈到了FormPanel中的fieldset和ComboBox,今天我们继续把这个话题说下去,说全一点,说深一点。 3.可选的fieldset实例 其实就是带个chechbox,有点像论坛注册时有一部分是选填信息的那种效果,主要...

    上篇中我们简单的谈到了FormPanel中的fieldset和ComboBox,今天我们继续把这个话题说下去,说全一点,说深一点。

    3.可选的fieldset实例

       其实就是带个chechbox,有点像论坛注册时有一部分是选填信息的那种效果,主要知识点:

    //因为觉得这个参数特别,特举一例以说明

    1.checkboxToggle:true//true则呈现一个带checkbox的fieldset,选中则展开,否则相反,默认为false

    2.checkboxName:string//当上面为true时,作为checkbox的name,方便表单操作

    这里我把js核心代码贴出来(html代码与上一篇中完全相同,不列出):

    //在上一节的基础代码的items里面添加如下配置

    {

    xtype:"fieldset",

    checkboxToggle:true,//关键参数,其他和以前的一样

    checkboxName:"dfdf",

    title:"选填信息",

    defaultType:'textfield',

    width:330,

    autoHeight:true,//使自适应展开排版

    items:[{

         fieldLabel:"UserName",

         name:"user",

         anchor:"95%"//330px-labelWidth剩下的宽度的95%,留下5%作为后面提到的验证错误提示

       },

       {

         fieldLabel:"PassWord",

         inputType:"password",//密码文本

         name:"pass",

         anchor:"95%"

       }]

    }

    extjs 5 - cruelchen - 保存中...extjs 5 - cruelchen - 保存中...

    4.表单验证实例(空验证,密码确认验证,email验证)

    我们可以用单独的js写表单验证,但是extjs已经为我们想到了(自己单独写反而不方便)。

    在验证之前,我不得不提两个小知识点:

    //大家在很多的extjs代码中都看到了这两个,他们都起提示作用的

    Ext.QuickTips.init();//支持tips提示

    Ext.form.Field.prototype.msgTarget='side';//提示的方式,枚举值为"qtip","title","under","side",id(元素id)

              //side方式用的较多,右边出现红色感叹号,鼠标上去出现错误提示,其他的我就不介绍了,可自行验证

    //大家可以分别去掉这两行代码,看效果就会明白他们的作用,(放在onReady的function(){}中)

    1.我们看一个最简单的例子:空验证(其实这不算是一个专门的验证例子)

    //空验证的两个参数

    1.allowBlank:false//false则不能为空,默认为true

    2.blankText:string//当为空时的错误提示信息

    js代码为:

    var form1 = new Ext.form.FormPanel({

            width:350,

            frame:true,

            renderTo:"form1",

            labelWidth:80,

            title:"FormPanel",

            bodyStyle:"padding:5px 5px 0",

            defaults:{width:150,xtype:"textfield",inputType:"password"},

            items:[

                    {fieldLabel:"不能为空",

                     allowBlank:false,//不允许为空

                      blankText:"不能为空,请填写",//错误提示信息,默认为This field is required!

                     id:"blanktest",

                     anchor:"90%"

                    }

            ]

         });

    extjs 5 - cruelchen - 保存中...

    2.用vtype格式进行简单的验证。

    在此举邮件验证的例子,重写上面代码的items配置:

    items:[

                    {fieldLabel:"不能为空",

                     vtype:"email",//email格式验证

                     vtypeText:"不是有效的邮箱地址",//错误提示信息,默认值我就不说了

                     id:"blanktest",

                     anchor:"90%"

                    }

    extjs 5 - cruelchen - 保存中...

    你可以修改上面的vtype为以下的几种extjs的vtype默认支持的验证:

    //form验证中vtype的默认支持类型

    1.alpha //只能输入字母,无法输入其他(如数字,特殊符号等)

    2.alphanum//只能输入字母和数字,无法输入其他

    3.email//email验证,要求的格式是"langsin@gmail.com"

    4.url//url格式验证,要求的格式是http://www.***

    3.确认密码验证(高级自定义验证)

    前面的验证都是extjs已经提供的验证,我们也可以自定义验证函数,比上面要复杂点了。我们一起做一个密码确认的例子。

    我们修改前面的代码:

    //先用Ext.apply方法添加自定义的password验证函数(也可以取其他的名字)

    Ext.apply(Ext.form.VTypes,{

         password:function(val,field){//val指这里的文本框值,field指这个文本框组件,大家要明白这个意思

           if(field.confirmTo){//confirmTo是我们自定义的配置参数,一般用来保存另外的组件的id值

               var pwd=Ext.get(field.confirmTo);//取得confirmTo的那个id的值

               return (val==pwd.getValue());

            }

           return true;

         }

    });

    //配置items参数

    items:[{fieldLabel:"密码",

                     id:"pass1",

                     anchor:"90%"

                    },{

                     fieldLabel:"确认密码",

                     id:"pass2",

                     vtype:"password",//自定义的验证类型

                       vtypeText:"两次密码不一致!",

                       confirmTo:"pass1",//要比较的另外一个的组件的id

                     anchor:"90%"

                    }

    extjs 5 - cruelchen - 保存中...

    关于vtype的内容还有很多内容要挖掘,但现在我们就点到这里为止,以后有机会再讨论它的其他高级验证。

    不知不觉中写了这么多,大家都要歇息了,我们下次再接着讨论,

    展开全文
  • ExtJS4ExtJS5MD5 加密

    2015-12-02 14:54:43
    适用于ExtJS4、ExtJS5 MD5加密算法!
  • extjs5官方demo

    2017-10-09 15:49:43
    http://【localhost:5012/web】/Extjs5Demo/build/examples/index.html 【】内,输入Extjs5Demo在服务器上的地址,即可看到官方文档
  • extJs5 api part1

    2016-07-25 21:23:57
    extJs5 api part1
  • Extjs5.0从入门到实战开发信息管理系统(Extjs基础、Extjs5新特性、Spring、Spring mvc、Mybatis)视频教程分享,需要的可以下载看看
  • ExtJS 5 开源版本

    2014-08-15 16:07:21
    ExtJS 5 GPL版本,在官网上面找了半天才找到,下载下来分享给大家,文件过大,分两部分,这是第一部分,第二部分地址(不要分了):http://download.csdn.net/detail/lrjlovezyt/7760527
  • The new example app is an ExtJS5-MVVM port of the existing MVC-example app. The port is not exactly one-by-one, but the output is very very similar to the MVC app. <p>The base structure has been ...
  • EXTJS5 日期时分秒控件

    2015-08-01 16:59:03
    EXTJS5 日期时分秒控件,直接引用到程序中使用。网上有很多extjs4版本的和EXTJS5不兼容。调用实例代码: {labelWidth:60,width: 220,name:'mydate',fieldLabel: '日期',allowBlank: false,xtype: 'datetimefield',...
  • Example app with ExtJS 5

    2020-12-09 02:12:59
    <p>today I started creating a new example app with ExtJS 5 and an MVVM architecture approach. My goal was to get an app like the one we have ...
  • Extjs Form是一个比较常用的控件,主要用来显示和编辑数据的,今天这篇文章将介绍Extjs ...本文的示例代码适用于Extjs 4.x和Extjs 5.x,在Extjs 4.2.1 和Extjs 5.0.1中亲测可用! 本文由齐飞(youring2@gmail.com...

    Extjs Form是一个比较常用的控件,主要用来显示和编辑数据的,今天这篇文章将介绍Extjs Form控件的详细用法,包括创建Form、添加子项、加载和更新数据、验证等。

    本文的示例代码适用于Extjs 4.x和Extjs 5.x,在Extjs 4.2.1 和Extjs 5.0.1中亲测可用!

    本文由齐飞(youring2@gmail.com)原创,并发布在http://www.qeefee.com/article/extjs-form-in-detail,转载请注明出处!推荐更多Extjs教程Extjs5教程

    Form和Form Basic

    Extjs Form和Form Basic是两个东西,Form提供界面的展示,而Form Basic则提供数据的处理、验证等功能。每一个Form Panel在创建的时候,都会绑定一个Form Basic,我们可以通过方法getForm来获取:

    form.getForm()

    在API方面,Form的config中没有显示Form Basic的config,但是Form Basic的config在Form的config中完全有效,也就是说,当我们使用Extjs Form的时候,不仅仅要查看Form的API文档,还要浏览相关的Form Basic的文档。

    创建Extjs Form控件

    var form = Ext.create("Ext.form.Panel", {
        width: 500,
        height: 300,
        margin: 20,
        title: "Form",
        renderTo: Ext.getBody(),
        collapsible: true,  //可折叠
        autoScroll: true,   //自动创建滚动条
        defaultType: 'textfield',
        defaults: {
            anchor: '100%',
        },
        fieldDefaults: {
            labelWidth: 80,
            labelAlign: "left",
            flex: 1,
            margin: 5
        },
        items: [
            {
                xtype: "container",
                layout: "hbox",
                items: [
                    { xtype: "textfield", name: "name", fieldLabel: "姓名", allowBlank: false },
                    { xtype: "numberfield", name: "age", fieldLabel: "年龄", decimalPrecision: 0, vtype: "age" }
                ]
            },
            {
                xtype: "container",
                layout: "hbox",
                items: [
                    { xtype: "textfield", name: "phone", fieldLabel: "电话", allowBlank: false, emptyText: "电话或手机号码" },
                    { xtype: "textfield", name: "phone", fieldLabel: "邮箱", allowBlank: false, emptyText: "Email地址", vtype: "email" }
                ]
            },
            {
                xtype: "textareafield",
                name: "remark",
                fieldLabel: "备注",
                height: 50
            }
        ],
        buttons: [
            { xtype: "button", text: "保存" }
        ]
    });

    以上代码将创建一个Form表单,效果如下:

    image

    Extjs Form布局

    在Extjs Form中,默认的布局方式是layout: 'anchor',具体的Extjs 布局可以参考我的Extjs 布局系统详解这篇文章。

    anchor默认每行只显示一个控件,如果我们要在一行中显示多个,需要将这些控件放在一个container中,并设置container的layout为hbox。

    Extjs Form加载数据

    Form可以加载Model数据,也可以加载Json数据,这样我们可以方便的将json或者record数据显示在Extjs Form控件中。

    加载Record数据

    Extjs Form通过方法loadRecord加载record,代码如下:

    var userRecord = Ext.create("MyApp.model.User", {
        name: "Tom",
        age: 25,
        phone: "123456"
    });
    
    form.loadRecord(userRecord);

    加载Json数据

    Extjs Form可以通过调用formbasic的setValues方法来加载json数据,代码如下:

    var data = {
        name: "Tom",
        age: 25,
        phone: "123456"
    };
    form.getForm().setValues(data);

    Extjs Form获取与更新数据

    通过上面的方法,我们可以为Form加载record或json数据。当我们完成编辑之后,还需要获取编辑后的数据,或者将编辑后的数据更新到对应的record中,Extjs Form提供了相应的方法来完成这些操作。

    如果Extjs Form加载的是record:

    form.updateRecord();

    如果Extjs Form加载的是json数据:

    form.getForm().getValues()

    Extjs Form异步加载与提交

    Extjs Form除了可以加载页面中已存在的数据外,还可以通过Ajax的方式异步加载与提交数据。这种方法不太常用。

    异步加载

    form.getForm().load({
        url: "form-data.ashx"
    });

    服务器返回的数据格式如下:

    {
        success:true,
        data:{
            name: "Tom",
            age: 25,
            phone: "123456"
        }
    }

    异步提交

    form.submit({
        url: "form-submit.ashx",
        success: function (form, action) {
            Ext.Msg.alert('Success', action.result.msg);
        }
    });

    submit方法提交的数据为Form中的所有value,可以在服务器端获取到。

    本文由齐飞(youring2@gmail.com)原创,并发布在http://www.qeefee.com/article/extjs-form-in-detail,转载请注明出处!推荐更多Extjs教程Extjs5教程

    Extjs Form验证

    在所有开发语言中,客户端验证是必不可少的。Extjs Form也提供了客户端验证机制,我们可以通过vtype来实现客户端验证。接下来我们详细的了解一下Extjs的客户端验证。

    必填项,就是不能为空(allowBlank)

    效果:

    image

    代码:

    {
        xtype: "textfield",
        name: "UserName",
        fieldLabel: "用户名",
        allowBlank: false,
        flex: 1
    }

    输入长度限制,maxLength/minLength

    效果:

    image

    &

    image

    代码:

    {
        xtype: "textfield",
        name: "UserName",
        fieldLabel: "用户名",
        allowBlank: false,
        maxLength: 10,
        minLength: 3,
        flex: 1
    }

    值大小限制,maxValue/minValue

    值大小的限制常用于numberfield、datefield,可以指定一个可用值的范围。

    效果:

    image

    &

    image

    代码:

    {
        xtype: "numberfield",
        name: "Age",
        fieldLabel: "年龄",
        maxValue: 60,
        minValue: 18,
        flex: 1
    }

    vtype验证

    vtype提供了一些公用的验证类型,它们包括:

    • alpha:希腊数字
    • alphanum:字母和数字
    • email:电子邮件地址
    • url:网址

    这四种是extjs内置的,已经提供给我们可以直接来用的。我们拿email来进行示例。

    效果:

    image

    代码:

    {
        xtype: "textfield",
        name: "Email",
        fieldLabel: "Email",
        vtype: "email",
        flex: 1
    }

    自定义vtype

    上面介绍了vtype的简单用法,可以看到这种验证是非常好用的,但是小伙伴们不觉得extjs提供的vtype太少吗?

    小伙伴们不要嫌弃,接下来我们看一下如何自定义vtype,代码:

    //验证ip地址
    Ext.apply(Ext.form.field.VTypes, {
        IPAddress: function (v) {
            return /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(v);
        },
        IPAddressText: '只能输入ip地址',
        IPAddressMask: /[\d\.]/i
    });

    用法:

    {
        xtype: "textfield",
        name: "ip",
        fieldLabel: "IP地址",
        vtype: "IPAddress"
    }

    效果:

    image




    本文转自齐师傅博客园博客,原文链接:http://www.cnblogs.com/youring2/p/3983950.html,如需转载请自行联系原作者
    展开全文
  • Extjs 5 分组统计gridpanel 解决了在IE下数据无法正常显示的问题。有实际代码,运行简单,实用。

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/42240531

    本文作者:sushengmiyan

    ------------------------------------------------------------------------------------------------------------------------------------

    本文以一个实际例子,使用了extjs的gridpanel中的分组统计显示功能,涉及知识点:

      Ext.grid.Panel  model/store store中的data grid中的features以及其中ftype: 'groupingsummary'等

    一、先看效果图:


    可以看到图片显示的安装月份进行了分组显示 在每个分组下面会有合计和平均值显示。我这个例子在IE8和谷歌浏览器以及火狐浏览器下均正常显示。

    二、贴上所有的代码(其实就只有一个jsp页面就足够了)

    <%@ page contentType="text/html; charset=UTF-8" %>
    <%
    	String context = request.getContextPath();
    %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    	<title>报表</title>
    	<script type="text/javascript">
    	  window.context = "<%=context%>";
        </script>
        <script type="text/javascript" src="<%=context %>/extjs5/include-ext.js"></script>
    	<script type="text/javascript" src="<%=context %>/extjs5/packages/ext-locale/build/ext-locale-zh_CN.js"></script>
    	<script type="text/javascript" src="<%=context %>/app/ux/Month.js"></script>
    </head>
    <body>
    <script type="text/javascript" >
    
       Ext.onReady(function(){
    	   var data = [{
    		             factory:'第一家维修公司', date:'2014-05', cost:52492.0, costav:52492.0
    			      },{
    					 factory:'第二家维修公司', date:'2014-05', cost:760.0, costav:760.0
    				  },{
    					 factory:'第三家维修公司', date:'2014-05', cost:1807.0, costav:1807.0
    				  },{
    					 factory:'第一家维修公司', date:'2014-06', cost:4921.0, costav:4921.0
    				  },{
    					 factory:'第二家维修公司', date:'2014-06', cost:1020.0, costav:1020.0
    				  },{
    					 factory:'第三家维修公司', date:'2014-06', cost:1637.0, costav:1637.0
    				  },{
    					 factory:'第一家维修公司', date:'2014-07', cost:48150.0, costav:48150.0
    				  },{
    					 factory:'第二家维修公司', date:'2014-07', cost:7940.0, costav:7940.0}];
    
    	   var store = Ext.create('Ext.data.Store', {
    				   fields: [{name: 'date'}, {name: 'cost'},{name: 'costav'},{name: 'factory'}],
                       groupField: 'date',
    				   data: data
    	   });
    
    	   var grid = Ext.create('Ext.grid.Panel', { 
    			frame: true,
    			height: 800,
    			columnLines: true, // 加上表格线  
    			features: [{
    				id: 'group',
    				ftype: 'groupingsummary',
    				groupHeaderTpl: '{name}'+'月份车辆美容及维修费用',
    				hideGroupedHeader: false,
    				enableGroupingMenu: false
    			}, {
    				ftype: 'summary',
    				summaryType: 'average',
    				dock: 'bottom'
    			}],
    		   renderTo: Ext.getBody(),
               columns: [{ 
    			             text: '维修时间', dataIndex: 'date',width:100, 
    					        summaryRenderer: function(value, summaryData, dataIndex) {
    						      return '合计'}
    			        },{ 
    					     text: '维修费用(元)', dataIndex: 'cost', width:180,
    				         field: { xtype: 'numberfield'},
    				         summaryType: 'sum',
                             renderer: function(value, metaData, record, rowIdx, colIdx, store, view){
                                  return value + ' 元'},
    					     summaryRenderer: function(value, summaryData, dataIndex) {
                                  return value + ' 元'}
    			        },{
    					     text: '维修厂家', dataIndex: 'factory',width:120,
    				         summaryRenderer: function(value, summaryData, dataIndex) {
    						      return '平均值'}
    			        },{ 
    						 text: '', dataIndex: 'costav', width:180,
    				         field: {xtype: 'numberfield'},
    				         summaryType: 'average',
                             renderer: function(value, metaData, record, rowIdx, colIdx, store, view){
                                  return ''},//这列最后显示平均值 暂时这样转换显示
    					     summaryRenderer: function(value, summaryData, dataIndex) {
                                  return value + ' 元'}
    			        }],
    		store: store
    	    });
    		grid.show();
      });
    </script>
    </body>
    </html>
    这个随便起名一个jsp就可以啦。

    里面使用了一个日期选择控件,只可以选择年月的。顺便也贴一下代码吧

    /** Months picker 
          重写 field.Date 
    **/  
    Ext.define('app.ux.Month', {  
       extend:'Ext.form.field.Date',  
       alias: 'widget.monthfield',  
       requires: ['Ext.picker.Month'],  
       alternateClassName: ['Ext.form.MonthField', 'Ext.form.Month'],  
       selectMonth: null,  
       createPicker: function() {  
           var me = this,  
               format = Ext.String.format;  
           return Ext.create('Ext.picker.Month', {  
               pickerField: me,  
               ownerCt: me.ownerCt,  
               renderTo: document.body,  
               floating: true,  
               hidden: true,  
               focusOnShow: true,  
               minDate: me.minValue,  
               maxDate: me.maxValue,  
               disabledDatesRE: me.disabledDatesRE,  
               disabledDatesText: me.disabledDatesText,  
               disabledDays: me.disabledDays,  
               disabledDaysText: me.disabledDaysText,  
               format: me.format,  
               showToday: me.showToday,  
               startDay: me.startDay,  
               minText: format(me.minText, me.formatDate(me.minValue)),  
               maxText: format(me.maxText, me.formatDate(me.maxValue)),  
               listeners: {   
           select:        { scope: me,   fn: me.onSelect     },   
           monthdblclick: { scope: me,   fn: me.onOKClick     },      
           yeardblclick:  { scope: me,   fn: me.onOKClick     },  
           OkClick:       { scope: me,   fn: me.onOKClick     },      
           CancelClick:   { scope: me,   fn: me.onCancelClick }          
               },  
               keyNavConfig: {  
                   esc: function() {  
                       me.collapse();  
                   }  
               }  
           });  
       },  
       onCancelClick: function() {  
           var me = this;      
       me.selectMonth = null;  
           me.collapse();  
       },  
       onOKClick: function() {  
           var me = this;      
       if( me.selectMonth ) {  
                  me.setValue(me.selectMonth);  
               me.fireEvent('select', me, me.selectMonth);  
       }  
           me.collapse();  
       },  
       onSelect: function(m, d) {  
           var me = this;      
       me.selectMonth = new Date(( d[0]+1 ) +'/1/'+d[1]);  
       }  
    });   
    /** Months picker **/  

    知识点梳理:

    ①。显示的数据,这里整理好了一些数据,在实际中,我们可以通过查询数据库获取,分组查询便可。

    	   var data = [{
    		             factory:'第一家维修公司', date:'2014-05', cost:52492.0, costav:52492.0
    			      },{
    					 factory:'第二家维修公司', date:'2014-05', cost:760.0, costav:760.0
    				  },{
    					 factory:'第三家维修公司', date:'2014-05', cost:1807.0, costav:1807.0
    				  },{
    					 factory:'第一家维修公司', date:'2014-06', cost:4921.0, costav:4921.0
    				  },{
    					 factory:'第二家维修公司', date:'2014-06', cost:1020.0, costav:1020.0
    				  },{
    					 factory:'第三家维修公司', date:'2014-06', cost:1637.0, costav:1637.0
    				  },{
    					 factory:'第一家维修公司', date:'2014-07', cost:48150.0, costav:48150.0
    				  },{
    					 factory:'第二家维修公司', date:'2014-07', cost:7940.0, costav:7940.0}];

    ②store数据交互

    	   var store = Ext.create('Ext.data.Store', {
    				   fields: [{name: 'date'}, {name: 'cost'},{name: 'costav'},{name: 'factory'}],
                       groupField: 'date',
    				   data: data
    	   });

    这里只需要指定一个groupField就可以了,只需要这一步。


    ③。grid主体

    	   var grid = Ext.create('Ext.grid.Panel', { 
    			frame: true,
    			height: 800,
    			columnLines: true, // 加上表格线  
    			features: [{
    				id: 'group',
    				ftype: 'groupingsummary',
    				groupHeaderTpl: '{name}'+'月份车辆美容及维修费用',
    				hideGroupedHeader: false,
    				enableGroupingMenu: false
    			}, {
    				ftype: 'summary',
    				summaryType: 'average',
    				dock: 'bottom'
    			}],
    		   renderTo: Ext.getBody(),
               columns: [{ 
    			             text: '维修时间', dataIndex: 'date',width:100, 
    					        summaryRenderer: function(value, summaryData, dataIndex) {
    						      return '合计'}
    			        },{ 
    					     text: '维修费用(元)', dataIndex: 'cost', width:180,
    				         field: { xtype: 'numberfield'},
    				         summaryType: 'sum',
                             renderer: function(value, metaData, record, rowIdx, colIdx, store, view){
                                  return value + ' 元'},
    					     summaryRenderer: function(value, summaryData, dataIndex) {
                                  return value + ' 元'}
    			        },{
    					     text: '维修厂家', dataIndex: 'factory',width:120,
    				         summaryRenderer: function(value, summaryData, dataIndex) {
    						      return '平均值'}
    			        },{ 
    						 text: '', dataIndex: 'costav', width:180,
    				         field: {xtype: 'numberfield'},
    				         summaryType: 'average',
                             renderer: function(value, metaData, record, rowIdx, colIdx, store, view){
                                  return ''},//这列最后显示平均值 暂时这样转换显示
    					     summaryRenderer: function(value, summaryData, dataIndex) {
                                  return value + ' 元'}
    			        }],
    		store: store
    	    });

    这里需要注意,1.需要给grid指定高度,如果不指定IE8下数据不显示,应该是个bug吧。

    2.分组以及统计的关键

    			features: [{
    				id: 'group',
    				ftype: 'groupingsummary',//分组统计,可以选择不分组的,各类型可以去API查找
    				groupHeaderTpl: '{name}'+'月份车辆美容及维修费用',//标题而已
    				hideGroupedHeader: false,
    				enableGroupingMenu: false
    			}, {
    				ftype: 'summary',//下方的汇总的
    				summaryType: 'average',//类型是求平均值,还有sum等,可以去API查找
    				dock: 'bottom'
    			}],
    OK

    就这样设置,就可以简单的实现一个分组报表统计了,有求平均值求和等方法。简单易用

    展开全文
  • EXTJS5 入门指南

    千次阅读 2014-06-23 14:47:07
    EXTJS5带领EXTJS步入了新的时代,Ext JS 5已经不再支持IE6、IE7和其他旧版本的浏览器了,这样可以显著减少跨整个框架的逻辑和样式设置。再加上额外的优化,Ext JS 5已经为企业级的Web应用程序迈出了惊人的一步。 ...
  • 该资源是使用ExtJS5开发的一套后台管理系统模板,包括基础的增删改查页面及弹框、表格、Tree等组件。
  • Intelij idea上怎么实现Extjs5或者Extjs6的代码提示。求大神支招..
  • 如何调用ExtJS5

    2014-12-10 16:40:10
    调用ExtJS 5,官方推荐使用SenchaCmd工具来生成一个应用程序架构,若不采用SenchaCmd的,如何通过手工调用呢...查看官方的DOC文档,在“Welcome to ExtJS"中关于调用ExtJS5的例子,如下:    Welcome to Ext JS!
  • 跟我一起学extjs5前10节内容源码

    千次下载 热门讨论 2014-07-03 10:59:05
    跟我一起学extjs5前10节内容源码,请自行根据讲解内容搭建环境。
  • ExtJS5搭建MVVM框架

    2018-02-13 21:12:00
    · ExtJs5能够搭建Js的MVC框架,通过配置路由能够通过左边树形菜单导航到所需的页面,效果如下: 搭建JS框架  新建home.htm页面作为ExtJs加载的主体页面,页面引入ExtJs需要的JS和ExtJs入口Js文件app.js &...
  • ExtJS5 - 编码规范

    千次阅读 2015-12-17 16:03:56
    Sencha官方推荐所有基于ExtJS 5的应用程序应使用统一的目录结构,所有的类都默认放在项目根目录下的app文件夹下,并根据其类型分为controller、model、store、view、ux等子文件夹。 命名
  • ExtJS5 - 认识MVVM

    千次阅读 2015-12-17 15:55:07
    ExtJS 5在原先支持MVC(Model-View-Controller)架构的基础上,新增了对MVVM(Model-View-ViewModel)架构的支持。MVVM架构的一大重要特性就是利用模型层和视图层的双向数据绑定,从而更好的实现应用程序代码的分层...
  • extjs5 更改主题

    千次阅读 2014-10-10 11:39:37
    extjs5的默认主题是ext-theme-neptune,可以用以下方法更改
  • Extjs5新特性

    2015-12-31 14:04:00
    近日Sencha团队发布了ExtJS5的beta版本,正式版即将发布。下面来看看这个全新的版本中包含了哪些重要的特性。1. 不再支持IE6和IE7作为一个古董级浏览器,IE6和IE7相当不招人待见,各大网站为了UI美观和用户体验做了...
  • ExtJs5+Spring.Net+MVC项目搭建笔记
  • 跟我一起学extjs5前20节的代码

    千次下载 热门讨论 2014-07-16 15:21:49
    跟我一起学extjs5前20节的代码,请各位自行根据前几节的说明搭建环境
  • Sencha ext js 5之前的版本中是没有viewmodel这个概念的,现在extjs5既然支持mvvm模式了,那么她的组件也就相应的增加了对mvvm的默认支持。现在看看我们经常使用的panel组件对mvvm模式的强大支持。
  • ExtJs5入门_HelloWorld

    2018-08-22 16:42:00
    ExtJS5是一个JavaScript应用程序框架,它为您提供了一整套工具用于创建跨平台的应用程序。Ext JS 5支持所有现代浏览器,IE8的最新版本以及Chrome和介于两者之间的。Ext JS是面向对象的、基于类库的。 第一个ExtJs案例...
  • Extjs5,文件导出,文件路径选择,就是在导出文件可以选择路径,就像那种在安装或下载时可以“浏览”的,可以选文件放到哪个地方的那种,请问要怎么实现的??? 最好有具体的例子可以参考啦,谢谢!!!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,609
精华内容 1,043
关键字:

extjs5