如何在ExtJS 4中的树节点上设置singleClickExpand

时间:2012-02-16 05:29:01

标签: tree extjs4

在ExtJS树上展开节点的默认操作是双击。

在版本4之前,TreeNode配置中有singleClickExpand属性。

如何在ExtJS第4版树上应用singleClickExpand行为?

在没有设置事件侦听器的情况下是否存在此行为的配置属性??

谢谢。

3 个答案:

答案 0 :(得分:9)

我花了一些时间寻找同样的事情。我觉得我可以用...明确回答你的问题 没有它没有配置选项。 我不得不设置一个点击处理程序。无论如何我还需要一个实现叶子点击的功能:

var tree = Ext.create('Ext.tree.Panel', {
    store: store,
    rootVisible: false,
    lines: false,
    useArrows: true,
    listeners: {
        itemclick: function(view, node) {
            if(node.isLeaf()) {
                // some functionality to open the leaf(document) in a tabpanel
            } else if(node.isExpanded()) {
                node.collapse();
            } else {
                node.expand();
            }
        }
    }
});

答案 1 :(得分:4)

实际上你使用树视图的扩展功能。

只需在你的treepanel上实现itemclick功能:

listeners: {
    itemclick: function (treeview, record, item, index, e, eOpts) {
        treeview.expand(record);
    }
}

答案 2 :(得分:2)

如果您正在使用键盘导航,您可能需要使用selectionChange事件以覆盖所有场景,但无论如何,这是我在我的案例中使用的方法来实现单击事件。

在树中定义一个新事件,例如假设您已经定义了一个继承自treepanel的类,然后在“initComponent”中创建事件:

Ext.define('MY.view.CheckList',{     extend:'Ext.tree.Panel',     别名:'widget.checklist',

store: 'CheckPoints',
useArrows: true,

initComponent: function () {

    this.callParent(arguments);     
    this.on("selectionchange", this.onSelectionChange);
    this.addEvents({
        singleClick: true 
    });
},

onSelectionChange: function(model, nodes){

    [....]

    // fire statusUpdated event
    this.fireEvent("singleClick", this, model, nodes);
}

});

然后你需要听你创建的事件,例如:

var mytree = Ext.create("MY.view.CheckList");

mytree.on(“singleClick”,函数(树,模型,节点){

console.log(">>>>>>>>>>>>>>>>>>>>> EVENT TRIGGERED <<<<<<<<<<<<<<<<<<<<<<<<");
console.log( tree, model, nodes);
var currSelPath = nodes[0].getPath();

//This will expand the node at the path you just clicked
tree.expandPath(currSelPath);

});

2件事:

  • 您需要稍微调整一下以适应您的代码方案
  • Ofc你可以直接听“selectionChange”事件并执行此操作,但我认为从代码可重用性standpopint,它更清晰,更明显,如果你在发布事件之前添加更多的逻辑和检查“单击“并想象如果你有更多从这个基础树继承的树,你只需要做一次。

这不是最完美的解决方案,我敢肯定,但在我的情况下工作得很好。

HTH!