extjs有条件地将侦听器应用于组件

时间:2014-12-18 16:46:02

标签: javascript extjs

我得到了一个EXT JS应用程序,它包含一个函数内部的datefield(该函数还呈现其他组件)。目前,函数被调用两次以创建(从功能角度来看)两个相同的datefield组件。两个日期字段组件的区别在于ID和名称不同,因为它们的名称取决于传递给函数的参数。

我想让两个datefield组件的行为略有不同,而不需要创建两个不同的datefield组件。我想知道如果满足某些条件,是否可以仅将侦听器应用于组件?

EG:

if(some condition is true){
    select: function(datefield, date){
               //code
        }
}

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

EG:

select: function(datefield, date){
    if(some condition is true){
        //code             
    }
    else{
       //Do nothing as this component doesn't need this listener.
}
}

我很确定第二种方式可行,但我不确定这是个好主意。第一种方式似乎略微清洁;我不确定看起来好像没有其他身体躺在那里。

2 个答案:

答案 0 :(得分:1)

我在其他组件上做了类似的实现,基本上是这样的:

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

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

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

希望这有帮助。

答案 1 :(得分:1)

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

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

我认为这应该做你需要的。