如何在ExtJS TreePanel中找到所选节点?

时间:2009-05-04 22:07:19

标签: extjs treepanel

我正在尝试在用户单击按钮时检索TreePanel的所选节点(如果有)。如何检索TreePanel中的选择节点?感谢。

10 个答案:

答案 0 :(得分:17)

您要做的是创建一个事件处理程序。每个ExtJs对象都有许多与它们自动关联的事件。您将编写一个事件处理程序(一个函数),然后您可以将其分配给事件侦听器。因此,在这种情况下,您可能希望为TreePanel组件的“click”事件分配一个事件处理程序。

var tbPan = new Ext.tree.TreePanel({
    itemId:'navTree',
    autoScroll: true,
    root: new Ext.tree.TreeNode({
        id: 'root',
        text: 'My Tree Root',
        rootVisible: true
    }),
    listeners: {
        click: {
            fn:clickListener
        }
    }
});

clickListener = function (node,event){
    // The node argument represents the node that
    // was clicked on within your TreePanel
};

但是,如果您想知道已经选择的节点会发生什么?此时,您需要访问TreePanel的选择模型。你提到了一个按钮动作。假设您想要将一个函数应用于该按钮的单击处理程序以获取所选节点:

var btn = new Ext.Button({
    text: 'Get Value',
    handler: function (thisBtn,event){
        var node = Ext.fly('navTree').getSelectionModel().getSelectedNode();
    }
});

您使用flyweight元素快速引用TreePanel本身,然后使用TreePanel的内部方法获取它的选择模型。之后,您使用选择模型(在本例中为DefaultSelectionModel)内部方法来获取选定节点。

您将在Ext JS文档中找到大量信息。在线(和离线AIR应用程序)API非常广泛。 Ext Core手册还可以让您深入了解ExtJS开发,即使您没有直接使用Core。

答案 1 :(得分:11)

var tree = Ext.create('Ext.tree.Panel', {
    store: store,
    renderTo: 'tree_el',
    height: 300,
    width: 250,
    title: 'ExtJS Tree PHP MySQL',
    tbar : [{
        text: 'get selected node',
        handler: function() {
            if (tree.getSelectionModel().hasSelection()) {
                var selectedNode = tree.getSelectionModel().getSelection();

                alert(selectedNode[0].data.text + ' was selected');
            } else {
                Ext.MessageBox.alert('No node selected!');
            }

        }

    }]

});

答案 2 :(得分:5)

在Ext JS 4中,您可以将监听器放在树面板上,如下所示:

listeners: {

    itemclick: {
        fn: function(view, record, item, index, event) {
            //the record is the data node that was clicked
            //the item is the html dom element in the tree that was clicked
            //index is the index of the node relative to its parent
            nodeId = record.data.id;
            htmlId = item.id;
        }
    }

}

答案 3 :(得分:3)

var selectednode = tree.getSelectionModel().getSelectedNode();

                //alert(selectednode);
                if(selectednode!=tree.getRootNode())
                selectednode.remove();

答案 4 :(得分:3)

var nodesSelected = Ext.getCmp('foldersTree').getSelectionModel().selected.items;
if(nodesSelected.length > 0)
{
    var node = nodesSelected[0];
    console.log(node.internalId);
}

这适用于ExtJS4 TreePanel

答案 5 :(得分:2)

对于ExtJS 4 ......

我在树状面板中添加了以下监听器:

listeners: 
{
  itemclick: function(view, record, item, index, e)
  {
    selected_node = record;
  }
}

其中selected_node是全局变量。 append和remove等函数可以与此记录变量一起使用,例如:

selected_node.appendChild({text: 'New Node', leaf: true});
selected_node.remove();

我已经为Add Node和Delete Node创建了按钮,使用上面的按钮将节点附加到所选节点并删除节点。 remove()将删除所选节点以及所有子节点!

您也可以随时使用所选节点(左键和右键单击都会选择): var selected_node = Ext.getCmp('tree_id')。getSelectionModel()。getSelection()[0];

答案 6 :(得分:1)

@Steve

Ext.fly('navTree').getSelectionModel().getSelectedNode();

不起作用,请使用

Ext.getCmp('navTree').getSelectionModel().getSelectedNode();

代替。

答案 7 :(得分:1)

var myTree = Ext.getCmp('tree-panel');
var selectednode = myTree.selModel.selNode

答案 8 :(得分:1)

在ExtJS4中,您可以使用getLastSelected()方法返回树中最后选择的项目。

请参阅ExtJS:http://docs.sencha.com/ext-js/4-0/#!/api/Ext.selection.Model-method-getLastSelected

示例可能如下所示:

var tree = this.up("window").down("supportedcontrolcircuitmodelselector");
var selectedCircuit = tree.getSelectionModel().getLastSelected()

答案 9 :(得分:0)

简单....

itemclick: function(view, record, item, index, e)
{
   alert(record.data.text);
}