Javascript 将extjs drop事件侦听器放在控制器而不是视图中

Javascript 将extjs drop事件侦听器放在控制器而不是视图中,javascript,extjs,extjs4,dom-events,Javascript,Extjs,Extjs4,Dom Events,我一直在遵循这个例子: 因此,对于我的应用程序版本,我尽可能地遵循MVC惯例。像上面的例子一样,我的视图包含捕捉“drop”事件的侦听器。这个很好用 但是,我如何才能拉出这个事件处理程序,以便将所有“代码”保留在控制器中 我的控制器: Ext.define('AM.controller.Cards', { extend: 'Ext.app.Controller', stores: ['BacklogCards', 'InprogressCards', 'ReviewCards'

我一直在遵循这个例子:

因此,对于我的应用程序版本,我尽可能地遵循MVC惯例。像上面的例子一样,我的视图包含捕捉“drop”事件的侦听器。这个很好用

但是,我如何才能拉出这个事件处理程序,以便将所有“代码”保留在控制器中

我的控制器:

Ext.define('AM.controller.Cards', {
    extend: 'Ext.app.Controller',

    stores: ['BacklogCards', 'InprogressCards', 'ReviewCards', 'DoneCards', 'Priorities', 'Sizes'],

    models: ['Card', 'Priority', 'Size'],

    views: ['card.List', 'priority.prioritycombo'],

    init: function () {
        this.control({
            'cardlist dataview': {
                itemdblclick: this.editUser
            },
            'cardlist': {
                edit: this.inlineUpdateUser,
                drop: this.dropit
            }
        });
    },

    dropit: function () {
        alert("in");
    },
我希望这会起作用,但是drop事件处理程序似乎只在视图中起作用

观点:

viewConfig: {
    plugins: {
        ptype: 'gridviewdragdrop',
        dragGroup: 'firstGridDDGroup',
        dropGroup: 'firstGridDDGroup'
    },
    listeners: {
        drop: function (node, data, dropRec, dropPosition) {
            var dropOn = dropRec ? ' ' + dropPosition + ' ' + dropRec.get('name') : ' on empty view';
            alert("Drag from right to left " + data.records[0].get('name') + " " + dropOn);
        }
    }
},

将以下内容添加到控制器的启动fn或网格的afterrender侦听器

var grid = Ext.ComponentQuery.query('cardlist');
grid.view.on('drop',this.onDrop,this)

或者,您可以将事件视图的drop事件关联到网格。

如果drop事件在dataview中起作用,请将其放入“cardList dataview”部分


我最初试过这个,但没能成功。但是我今天早上让它工作了,因为我离开了监听器:{drop:function(),在我刚刚删除整个代码块之前,我在视图中声明了它。谢谢:)EDIT:仔细想想,如果没有这个,它可以工作,我想我只是忘了在选择器中包含dataview。
init: function () {
        this.control({
            'cardlist dataview': {
                itemdblclick: this.editUser,
                drop: this.dropit
            },
            'cardlist': {
                edit: this.inlineUpdateUser
            }
        });
    },