Javascript ext js有条件地将侦听器应用于componenet

Javascript ext js有条件地将侦听器应用于componenet,javascript,extjs,Javascript,Extjs,我得到了一个extjs应用程序,它包含一个datefield,它位于一个函数内部(该函数还呈现其他组件)。目前,函数被调用两次,以创建(从函数的角度来看)两个idencticaldatefield组件。这两个datefield组件的区别在于ID和名称不同,因为它们的命名取决于传递到函数中的参数 我想给这两个datefield组件稍微不同的行为,而不需要创建两个不同的datefield组件。我想知道,如果满足某些条件,是否可以只将侦听器应用于组件 例如: 或者我是否必须为这两个组件提供所有侦听器,

我得到了一个extjs应用程序,它包含一个
datefield
,它位于一个函数内部(该函数还呈现其他组件)。目前,函数被调用两次,以创建(从函数的角度来看)两个idenctical
datefield
组件。这两个datefield组件的区别在于ID和名称不同,因为它们的命名取决于传递到函数中的参数

我想给这两个
datefield
组件稍微不同的行为,而不需要创建两个不同的
datefield
组件。我想知道,如果满足某些条件,是否可以只将侦听器应用于组件

例如:

或者我是否必须为这两个组件提供所有侦听器,但在内部执行条件,以便如果条件不满足,则永远不会为该组件触发该事件

例如:


我相当肯定第二种方法会奏效,但我不确定这是个好主意。第一条路看起来稍微干净一点;我不确定它是否看起来太好,因为它周围有空的其他实体。

我在其他组件上也做了类似的实现,基本上类似于:

 var yourComponent = Ext.create('...',{});

 if (something is true){
    yourComponent.on('select', this._doStuff, yourComponent);  
 }

//
 _doStuff: function(component){
   //do stuff
 }

希望这有帮助。

您可以使用日期字段的
方法

if(some condition){
    datefield.on('select', function(field,value){
        // code for your select here.
    });
}

我认为这应该满足您的需要。

因此,当您在
方法上使用
时,处理函数是否可以使用与事件侦听器相同的参数?例如,对于
datefield
中的select事件侦听器,函数参数是
datefield
本身和所选日期。您可以像这样使用
datefield.on('select',onDateSelect)
,然后有:
onDateSelect:function(field,value){}
 var yourComponent = Ext.create('...',{});

 if (something is true){
    yourComponent.on('select', this._doStuff, yourComponent);  
 }

//
 _doStuff: function(component){
   //do stuff
 }
if(some condition){
    datefield.on('select', function(field,value){
        // code for your select here.
    });
}