【问题标题】:Month field on EXTJS 5.1EXTJS 5.1 上的月份字段
【发布时间】:2015-03-27 15:30:15
【问题描述】:

我从另一个堆栈溢出帖子中得到了这个很棒的小提琴 https://fiddle.sencha.com/#fiddle/h5i(感谢 igor)。但我有一个问题:如果我选择 extjs 版本 5.1(我在我的应用程序中使用的版本),代码将不起作用。问题是当我点击一个月或一年时,日历刚刚关闭(您可以通过将版本设置为 5.1 并再次运行小提琴来尝试该行为)。 我尝试自定义部分代码,但没有任何改变:s.

任何人都知道为什么这不适用于 extjs 5.1,或者我该如何解决这个问题?

提前致谢:)!

【问题讨论】:

  • 在 ExtJs 5.1 中使用 FireFox 对我来说效果很好
  • 哦!是的,它也适用于 IE !但它不适用于铬!好奇怪^^'

标签: extjs field extjs5 monthcalendar


【解决方案1】:

不知何故,Chrome 的行为有所不同。请尝试以下操作:

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);
}

【讨论】:

  • 有什么办法可以防止在这个自定义日期字段中手动输入。即我应该只能通过选择器提供价值
【解决方案2】:

添加属性:

onFocusLeave: Ext.emptyFn

【讨论】:

    【解决方案3】:

    试试这个,它对我来说很好。

    Ext.onReady(function() {
      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;
          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]);
        }
      });
    
      Ext.create('Ext.form.field.Month', {
        format: 'F, Y',
        fieldLabel: 'Date',
        renderTo: Ext.getBody()
      });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      相关资源
      最近更新 更多