Drag之后如何触发事件;放在TreePanel上

时间:2011-06-10 11:38:11

标签: extjs panel

如何使用Ext.tree.ViewDDPlugin的事件?

我有一个使用DDPplugin的TreePanel,但我想知道如何监听drop事件。

这就是我的代码:

var monPretree = Ext.create('Ext.tree.Panel',{
            id : 'treepanel',
            title : 'TITRE',
            //width : 800,
            //height : 600,
            width : 500,
            enableDD: true,
            useArrows : true,
            viewConfig : {
                plugins : {
                    ptype: 'treeviewdragdrop',     
                      appendOnly: true,     
                      listeners: {       
                        drop: function (node, data, overModel, dropPosition) {         
                              alert('CHANGE');       
                        },       
                        notifyDrop: function (dragSource, event, data) {         
                              var nodeId = data.node.id;         
                              alert(nodeId);       
                        },       
                        notifyOver: function (dragSource, event, data) {         
                            alert('over');
                        }     
                    }   
                }

            },
            singleExpand : false,
            store : monPrestore,
            rootVisible : false,

我想发送drop事件,例如,但我的代码不起作用

谢谢:)

4 个答案:

答案 0 :(得分:10)

我有同样的问题,找到了这个页面。

文档中有注释,在事件部分: “此事件通过TreeView触发。将侦听器添加到TreeView对象”

我已经尝试在tree.Panel类中找到方法来获取视图,但未成功。所以,你需要做的只是将listners阻塞配置到viewConfig部分(不在插件部分):

viewConfig : {
                plugins : {
                    ptype: 'treeviewdragdrop',     
                    ...
                },
                listeners: {       
                        drop: function (node, data, overModel, dropPosition) {         
                              alert('CHANGE');       
                        },         
                    }   
                }

            },

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.tree.plugin.TreeViewDragDrop-event-drop

答案 1 :(得分:1)

看一下doc:

beforeinsert( Tree tree, Node parent, Node node, Node refNode, Object options )

在将新子项插入此树中的节点之前触发,返回false以取消插入。 ...

答案 2 :(得分:0)

作为Anton上面正确答案的补充:下面的代码显示了如何“从外部连接”到丢弃事件,例如从控制器等:

    // Drag & Drop on the TreePanel
    var ganttTreeView = ganttTreePanel.getView();
    ganttTreeView.on({
        'drop': me.onDrop,
        'scope': this
    });;

答案 3 :(得分:-1)

您还可以通过覆盖TreeGrid或TreePanel中的dropConfig来捕获drop事件。这是我做的一个例子。

var myTree = new Tree.TreePanel({
    id: 'treepanel',
    title: 'My Title',
    enableDD: true,
    ddGroup: 'GridDD',
    dataUrl: 'yourMethodURLForJSONData',
    dropConfig: {
        dropAllowed: true,
        ddGroup: "GridDD",
        notifyDrop: function(source, e, data) {
            alert("A node/leaf is dropped");

            //If you want few more details
            if (data.grid) {
                var node = data.selections[0].data;
                alert("This is a node dropped from a Grid.");
            } else {
                var node = data["node"];
                alert("This is a node dropped from a Tree.");
            }

        }
    }
});​

你也可以为Ext.ux.tree.TreeGrid做同样的事情。希望它会有所帮助。