【问题标题】:fireEvent inside a menu Listener errors菜单监听器错误中的fireEvent
【发布时间】:2015-02-11 00:24:12
【问题描述】:
return new Ext.Button({
  text: cfg.text,
  menu: {
    xtype: 'menu',
    items: cfg.menu,
    listeners: {
      itemclick: {
        fn: function() {
          console.log(this);
          this.fireEvent('tabchange', 'apps');
        },
        scope: this
      },
      scope: this
    },
    scope: this
  },
  minWidth: 50,
  scope: this
});

cfg 作为函数的参数出现。这一切都在那里。 Console.log 有效 - 因此直到那时的代码也有效。 这似乎确实在正确的范围内。

然而,fireEvent 的结局是:

未捕获的类型错误:无法读取未定义的属性“应用”

在错误日志中的调用之后,fireEvent 确实被执行,它到达了

EXTUTIL.Event.fire
 if(l && l.fireFn.apply(l.scope || me.obj || window, args) === FALSE)

失败的地方。

尝试在事件侦听器中调用事件时是否存在某种范围/嵌套问题?

我的目标是在按钮的菜单项选择上触发该事件。

【问题讨论】:

  • 您是否使用断点检查了范围(this)??
  • 如果我在每一步都特别添加了范围,范围仍然会出错吗?如果我没有添加范围:this - 我最终会得到未定义的 fireEvent。我也可以通过它访问其他变量、函数。我假设在该类中查找自定义事件并且找不到它时,fireEvent 仍然超出范围。这些事件在 initComponent 中设置为 this.addEvents()。 fireEvent 上的断点确实显示了正确的范围 - 并且列出了该事件。
  • AH - 逐步调试,似乎其中一个侦听器未定义。这仍然让我感到困惑 - 因为如果它在差异按钮处理程序中,同样的事件可以正常工作。

标签: extjs scope dom-events extjs3


【解决方案1】:

显然这是由于未定义的处理程序造成的。

处理程序是使用

设置的

this.on()

在超类初始化之前的 initComponent 中。

【讨论】:

    猜你喜欢
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2022-06-11
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多