私の質問は次のようなものです: How to prevent itemclick event on check change in Ext Js Tree .
しかし、それは私の問題の解決策を提供しません。私の質問は、イベントが発生する前にリスナーを削除するにはどうすればよいですか? 問題は、ツリーに 3 つのリスナーがあり、イベントcheckchange
を防止したいことです。itemclick
しかし、すべてが予期しない順序で実行されます。コードは次のとおりです。
checkchange:function(node,check){
alert("1");
},
itemclick:function(view,rec,item,index,eventObj){
alert("2");
},
render:function(){
Ext.getCmp('mytree').on('checkchange',function(node,check){
alert("0");
Ext.getCmp('mytree').removeListener('itemclick',this);
});
}
ツリーのノードをチェックすると、最初に が表示されalert(2)
、次にalert(1)
が表示されalert(0)
ます。したがって、リスナーを削除する必要があるコードは最後に発生し、反対のことが必要です。
編集:
itemclick
イベントを完全に削除したくありません。より適切な言葉は、イベントを「停止」して、それが起こらないようにすることです。
編集:
解決策は、itemclick イベント内で e.getTarget() チェックを行うことです。したがって、itemclick
イベント内のコードは次のようになります。
itemclick:function(view, record, item, index, e, eOpts){
if(e.getTarget('span',1,true)){
// all other code which should take place in case
// itemclick event does not come from checkbox element
}
}