ExtJS基础知识总结

Posted 风浪子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ExtJS基础知识总结相关的知识,希望对你有一定的参考价值。

概述

  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\',
            width: 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,
width: 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,
width: 280,
minChars: 0
}

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

 

以上是关于ExtJS基础知识总结的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS基础知识总结

ExtJs基础知识总结:DomIFrame和TreePanel

ExtJs基础知识总结:弹窗

线程学习知识点总结

从 extjs 工具提示中删除箭头,

如何使用 extJS 发布 json 数据