聆听视图控制器之间的事件

Jay*_*ram 7 controller extjs listen listener

我在试图弄清楚如何从另一个ViewController监听在一个View Controller中触发的事件时遇到了麻烦.

我的网格组件定义了一个监听器

selModel: {
    listeners: {
        selectionchange: 'onChemClick'
    }
},
Run Code Online (Sandbox Code Playgroud)

我的ViewController(称为chemslist)具有触发另一个事件的功能

onChemClick: function(view, selected) {
    console.log("before firing");
    this.fireEvent('canvasData', this, selected.length);
    console.log("after firing");
    console.log(selected);
}
Run Code Online (Sandbox Code Playgroud)

我有另一个控制器,实际上侦听此事件并显示数据.

Ext.define('view.canvas.CanvasController', {
extend: 'Ext.app.ViewController',
alias: 'controller.canvas',

listen: {
    controller: {
        chemslist: {
            canvasData: 'onCanvasData'
        }
    }
},

onCanvasData: function() {
    console.log("At Fire");
}

});
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我无法弄清楚为什么CanvasController无法监听事件.我也查看了Ticket示例并查看了如何触发事件以及其他viewControllers监听它们.

如果一个区域中的网格上的选择导致另一个面板中的大量更改,那么最佳做法是什么?如果事件被触发为全局,那么所有组件都会听取它?或者我应该在主控制器(而不是ViewController)中听它并根据事件生成组件?

谢谢!

Sak*_*aki 3

文档说:

选择器可以是控制器的 ID,也可以是任何控制器的“*”通配符。

与直觉相反,我们不应该为我们想要监听的控制器分配任何 id 或 itemId,但 id 是由 Application 自动创建的,并且 id 等于控制器类名。

我做了一个简单的例子- 按钮,2 个控制器 C1 监听按钮,C2 监听 C1。

  • 如果它们都是控制器,则您的示例有效。如果它们是 ViewController 怎么办? (3认同)