将extjs放置事件侦听器放入控制器而不是视图中

问题描述 投票:3回答:2

我一直在关注此示例:http://dev.sencha.com/deploy/ext-4.0.2a/examples/dd/dnd_grid_to_grid.html

因此,对于我的应用版本,我会尽可能遵循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");
    },

我希望这能起作用,但是放置事件处理程序似乎只在View内部起作用。

视图:

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);
        }
    }
},
javascript extjs extjs4 dom-events
2个回答
4
投票

如果放置事件在放入“ cardList dataview”部分的dataview中起作用

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

1
投票

添加到控制器的启动fn或网格的Afterrender侦听器下面

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

或者您可以将Event视图的放置事件中继到网格。

© www.soinside.com 2019 - 2024. All rights reserved.