1

我正在使用 Ext.picker.Date 并且我对 hide 事件进行了一些检查。但是,如果满足某个条件,我想停止该过程并且不隐藏日期选择器。

我尝试使用 beforehide 事件,并在那里运行我的代码,但该事件似乎没有触发。

下面是我的日期选择器的配置。如果条件为真,我怎样才能阻止选择器隐藏?

谢谢你的帮助。

var datePicker = new Ext.picker.Date({
        docked: "bottom",
        listeners: {
            beforehide: function() {
                console.log("before hide");
            },
            hide: function() {
                if (1 == 1) {
                    //how do I stop the picker from hiding?
                    Ext.Msg.alert("You cannot select that date.");                        
                }

            }
        },
        slotOrder: ["day", "month", "year"],
        useTitles: false
    });
    this.add(datePicker);
4

1 回答 1

0

你用的是煎茶触控 2 吗?我假设是这样,因为您使用的是 Ext.picker.Date。

根据文档,日期选择器不会触发隐藏事件: Sencha Docs

你真正想做的是在点击“完成”之后和选择器隐藏之前插入一些逻辑。选择器在内部调用 onDoneButtonTap;您可以像这样注入自己的逻辑:

Ext.define('MyApp.widget.DatePicker', {
    extend: 'Ext.picker.Date',
    xtype: 'mypicker',

    onDoneButtonTap: function() {
        if (1 == 1) {
            Ext.Msg.alert("You cannot select that date.");
        } else {
            Ext.picker.Date.prototype.onDoneButtonTap.call(this);
        }
    }
});

this.add({
    xtype     : 'mypicker',
    docked    : "bottom",
    slotOrder : ["day", "month", "year"],
    useTitles : false
});

这是假设您的逻辑将能够访问日期选择器范围内所需的内容。如果不是这种情况,您可以在创建日期选择器时将其他配置传递给它...可能类似于acceptedDateRange {...}

最简单的方法可能是:

var datePicker = new Ext.picker.Date({
    docked: "bottom",
    slotOrder: ["day", "month", "year"],
    useTitles: false,
    onDoneButtonTap: function() {
        if (1 == 1) {
            Ext.Msg.alert("You cannot select that date.");
        } else {
            Ext.picker.Date.prototype.onDoneButtonTap.call(this);
        }
    }
});

this.add(datePicker);

我认为像第一个示例中那样定义自己的类是可行的方法,尤其是在将逻辑注入现有框架代码以及在多个地方使用组件的情况下。但是第二个例子也可以。

于 2012-07-31T12:05:29.047 回答