删除ExtJS默认菜单侦听器

时间:2018-03-21 14:58:46

标签: javascript extjs extjs3

我正在使用extJS 3.4。我有一个弹出菜单项,其中有一个文本框,可以输入键盘输入(用于表单提交)。

然而,如果我必须修改文本字段中已经输入的内容,我就无法遍历已输入的文本。

在分析之后,我发现在事件监听器中,有一些监听器通过父div(mainMenu)附加到该组件,这导致了问题。

Event Listeners

删除这些侦听器(从调试器)后,左/右键开始处理textfield组件。

我不确定如何在代码中删除此侦听器。

任何帮助表示感谢。

以下是代码示例(HTML):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html class="  ext-strict">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Toolbar with Menus</title>
<script type="text/javascript" src="./Toolbar with Menus_files/ext-base.js"></script>
<script type="text/javascript" src="./Toolbar with Menus_files/ext-all.js"></script>
</head>
<body class=" ext-webkit ext-chrome ext-mac" id="ext-gen3">
<script type="text/javascript" src="./Toolbar with Menus_files/menus.js"></script>
<div id="container">
<div id="toolbar"></div>
</div>
</body>
</html>

以下是代码示例(JS):

Ext.onReady(function(){
    var combo = new Ext.form.ComboBox({
        displayField: 'state',
        typeAhead: true,
        mode: 'local',
        triggerAction: 'all',
        emptyText: 'Select a state...',
        selectOnFocus: true,
        width: 135,
        getListParent: function() {
            return this.el.up('.x-menu');
        },
        iconCls: 'no-icon'
    });
    var menu = new Ext.menu.Menu({
        id: 'mainMenu',
        style: {
            overflow: 'visible'     // For the Combo popup
        },
        items: [
            combo
        ]
    });
    var tb = new Ext.Toolbar();
    tb.render('toolbar');
    tb.add({text:'Button w/ Menu', menu: menu });
    menu.addSeparator();
    // add a combobox to the toolbar
    var combo = new Ext.form.ComboBox({
        displayField: 'state',
        typeAhead: true,
        mode: 'local',
        triggerAction: 'all',
        emptyText:'Select a state...',
        selectOnFocus:true,
        width:135
    });
    tb.addField(combo);
    tb.doLayout();
});

要重现此问题,您需要点击Button w/ Menu,这将打开一个文本框。在这个文本框中输入几个字符&amp;按左箭头键不会移动。而在按钮旁边的文本框中,您可以。

SS在这里:

Screen Shot

1 个答案:

答案 0 :(得分:0)

最后,我已经找到了解决这个问题的方法。删除侦听器的方法是转到父div组件&amp;在元素上调用removeAllListeners()方法。可以使用afterRenderHandler&amp ;; this.el函数在this.el.parent().removeAllListeners()函数中访问该元素。然后调用parent,以便删除干扰用户体验的不需要的侦听器。如果标识的侦听器是第n级父级(调用方法n次),则可以以链式方式调用this.el.parent().parent().removeAllListeners()方法。

Ex:var el = Ext.get('mainMenu');

如果您有ID,也可以尝试直接访问该元素:el.removeAllListeners();&amp;然后调用<UserControl x:Class="WpfApp4.UserControl1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WpfApp4" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" MouseDoubleClick="UserControl1_OnMouseDoubleClick"> <Grid> <TextBox Width="100" /> </Grid>