zoukankan      html  css  js  c++  java
  • ExtJS基础知识总结:自定义日历和ComboBox控件(二)

    概述

      1、ExtJS 5不支持日期选择框中只选择年月,为了满足ExtJs5可以实现选择年月的功能,查询网上资料,整理出来了相应的处理方式,最终实现的效果如下图:

         

      2、ExtJS 控件丰富,如果需要实现下拉列表控件ComboBox中含有Check样式的皮肤,只需要在ComboBox控件中监听相应的下拉事件和选择事件即可。实现的效果如下:

      

    日历控显示年月的实现方式

    1、编写ext-extendmonth.js,代码内容如下

    Ext.define('Ext.form.field.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,
                pickerConfig;
            pickerConfig = {
                pickerField: me,
                ownerCmp: me,
                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();
                    }
                }
            };
            if (Ext.isChrome) {
                me.originalCollapse = me.collapse;
                pickerConfig.listeners.boxready = {
                    fn: function () {
                        this.picker.el.on({
                            mousedown: function () {
                                this.collapse = Ext.emptyFn;
                            },
                            mouseup: function () {
                                this.collapse = this.originalCollapse;
                            },
                            scope: this
                        });
                    },
                    scope: me,
                    single: true
                }
            }
            return Ext.create('Ext.picker.Month', pickerConfig);
        },
        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]);
        }
    });

    2、引入ext-extendmonth.js以及修改预显示控件  xtype: 'monthfield'   属性值

        //头部菜单栏
        var proctoolbarText = Ext.create('Ext.toolbar.Toolbar', {
            renderTo: 'ReportData',
            items: [{
                xtype: 'monthfield',
                id: 'CountData',
                 180,
                labelWidth: 30,
                format: 'Y-m',
                fieldLabel: '日期',
                emptyText: '请输入开始时间',
                editable: false,        //不可编辑
                value: Ext.get("countDate").getValue()
            }]});

    下拉列表控件ComboBox中含有Check实现

    1、自定义JS控件Checktool

    var Checktool=Ext.create('Ext.form.field.ComboBox',{    
        name : 'cmb',    
        fieldLabel : '人员',    
        margin:'2 0 2 0',    
        labelWidth : 135,    
        labelAlign : 'right',    
        editable : false,    
        allowBlank : false,    
        multiSelect : true,    
        store : {    
            fields : ['personId', 'personName'],    
            data : [    
                {'personId':'0',personName:'张三'},    
                {'personId':'1',personName:'李四'},    
                {'personId':'2',personName:'王五'},    
                {'personId':'3',personName:'小名'}    
            ]    
        },    
        listConfig : {    
            itemTpl : Ext.create('Ext.XTemplate','<input type=checkbox>{[values.personName]}'),    
            onItemSelect : function(record) {    
                var node = this.getNode(record);    
                if (node) {    
                    Ext.fly(node).addCls(this.selectedItemCls);    
                    var checkboxs = node.getElementsByTagName("input");    
                    if (checkboxs != null)    
                        var checkbox = checkboxs[0];    
                    checkbox.checked = true;    
                }    
            },    
            listeners : {    
                itemclick : function(view, record, item, index, e, eOpts) {    
                    var isSelected = view.isSelected(item);    
                    var checkboxs = item.getElementsByTagName("input");    
                    if (checkboxs != null) {    
                        var checkbox = checkboxs[0];    
                        if (!isSelected) {    
                            checkbox.checked = true;    
                        } else {    
                            checkbox.checked = false;    
                        }    
                    }    
                }    
            }    
        },    
        queryMode : 'local',    
        displayField : 'personName',    
        valueField : 'personId',          
    });

     2、ExtJS引用控件即可

    //头部菜单栏
        var proctoolbarText = Ext.create('Ext.toolbar.Toolbar', {
            renderTo: 'ReportData',
            items: [
            Checktool
            ]});        

    下拉列表控件ComboBox设置默认值

    comboBox可以通过setValue设置值,但是准对Store后台返回Json的时候,通过Ext.getCmp('CategoryCode').SetValue('000983')设置相应的值时候,展示到页面的内容是空的,也就是说这样的设置默认值是无效的?比如下面这段代码:

    {
    xtype: "combobox",
    store: Ext.create('Ext.data.Store', {
        fields: ["CategoryCode", "Id"]
        autoLoad: false,
        proxy: {
        type: 'ajax',
        url: '/ProductManagement/GetTaxProfitList',
        reader: {
            type: 'json',
            rootProperty: 'Data',
            totalProperty: 'TotalCount'
            }
        }
    }),
    displayField: "CategoryCode",// ,   //显示出来的是name 
    valueField: "Id",       //值是id
    fieldLabel: "税收分类编码",     //label
    editable: true,        //不可编辑
    id: "CategoryCode",           //id
    hiddenvalue: 20,
    labelWidth: 60,
    //allowBlank: isAllow,
     280,
    minChars: 0
    }

    针对这种情况,我们可以通过修改如下代码处理:

    {
    xtype: "combobox",
    store: Ext.create('Ext.data.Store', {
        fields: ["CategoryCode", "Id"]
        autoLoad: false,
        proxy: {
        type: 'ajax',
        url: '/ProductManagement/GetTaxProfitList',
        reader: {
            type: 'json',
            rootProperty: 'Data',
            totalProperty: 'TotalCount'
            }
        }
    }),
    displayField: "CategoryCode",
    valueField: "CategoryCode",       
    fieldLabel: "税收分类编码",     //label
    editable: true,        //不可编辑
    id: "CategoryCode",           //id
    hiddenvalue: 20,
    labelWidth: 60,
     280,
    minChars: 0
    }

    也就是说,将ComboBoxdisplayFiled和valueFile设置成同一个值;这个仅仅是结果内容是单个值的情况,如果是实体对象,另当别论;PS:ComboBox指定非自动加载数据的Store之后,通过点击下拉列表的时候,该Store会自动Load后台数据的;

  • 相关阅读:
    微服务之间的通讯安全(四)-JWT优化之日志、错误处理、限流及JWT改造后执行流程梳理
    微服务之间的通讯安全(三)-JWT优化之权限控制
    微服务之间的通讯安全(二)-使用JWT优化认证机制
    微服务之间的通讯安全(一)-针对认证和SSO现有架构的问题
    认证和SSO(五)-基于token的SSO
    认证和SSO(四)-基于session的SSO存在的问题之token问题及基于session的SSO优缺点
    认证和SSO(三)-基于session的SSO存在的问题之session问题
    认证和SSO(二)-OAuth2四种授权模式及项目改造为授权码模式实现单点登陆SSO
    认证和SSO(一)-基于OAuth2单点登陆基本架构
    网关安全(五)-引入网关,在网关上实现流控,认证,审计,授权
  • 原文地址:https://www.cnblogs.com/xibei666/p/6127634.html
Copyright © 2011-2022 走看看