ExtJS Grid SelectionChange在其他控制器中触发

时间:2014-06-01 21:57:45

标签: extjs extjs4 extjs4.1 extjs4.2

我有一个带左侧导航菜单的主应用程序。我的Main.js控制器处理添加了Tab的treepanelselect事件:

onTreepanelSelect: function (selModel, record, index, options) {
        var mainPanel = Ext.ComponentQuery.query('mainpanel')[0];
        var newTab = mainPanel.items.findBy(
                  function (tab) {
                      return tab.title === record.raw.text;
                  });
        if (!newTab) {

            newTab = mainPanel.add({
                xtype: record.raw.class_name, // this is my View widget name
                closable: true,
                iconCls: "key",
                title: record.raw.text
            });
        }
        mainPanel.setActiveTab(newTab);
    },

两个导航菜单项是:

  • 员工(controller.Employee
  • 目录(controller.Catalog

controller.Catalog是我管理目录的控制器,与controller.Employee(2个不同的模块)100%分开

这是我的controller.Catalog

refs: [
    {
        ref: 'grid',
        selector: '#gridCatalog'
    }],
    init: function (application) {

        this.control({

            'grid': {
                selectionchange: this.gridSelectionChange
            }
        });
    },
 gridSelectionChange: function (model, records) {        
        console.log("Catalog Row Selected");
    },

所以view.Catalogs有一个gridCatalogselectionchange我进入我的控制台:选择了目录行。

另一方面,这是我的controller.Employee

 refs: [
        {
            ref: 'grid',
            selector: '#gridEmployee'
        }
    ],
    init: function (application) {
        this.control(
             {
                 'grid': {
                     itemdblclick: this.gridDoubleClick
                 }
             });
    },
gridDoubleClick: function (dv, record, item, index, e) {

       // nothing here for the moment.

    }

好的,这是魔鬼来到现场的地方。

当我运行我的应用程序时,然后单击我的导航项目" 员工"并且我的选项卡是使用其中的视图创建的。直到这里我们还不错。

但....当我点击我gridEmployee的一行时猜猜是什么?我进入我的控制台:选择目录行。

因此,由于某种原因,controller.Catalog正在倾听我的gridEmployee ...我的selectionchange中没有controller.Employee个事件处理程序。这些文件甚至位于我的" app"中的单独模块文件夹中。文件夹中。

关于我做错了什么的任何线索?这让我头晕目眩:(

1 个答案:

答案 0 :(得分:0)

两个控制器都在监听来自任何网格的事件,因为它们都在init`中使用grid组件查询。改进您的查询,使其不那么通用。

    init: function (application) {
        this.control(
             {
                 // Don't listen to any grid, just #gridEmployee
                 '#gridEmployee': {
                     itemdblclick: this.gridDoubleClick
                 }
             });
    },

第二档

    init: function (application) {

        this.control({
            // Don't listen to any grid, just #gridCatalog
            '#gridCatalog': {
                selectionchange: this.gridSelectionChange
            }
        });
    },

您似乎一直认为,您用于参考的内容会影响传递到this.control的组件查询,但它没有看到http://docs-origin.sencha.com/extjs/4.2.2/#!/api/Ext.app.Controller-method-control