【问题标题】:ExtJS 6.7 Modern - Ext.grid.Tree selectOnExpander doesnt work on node loadExtJS 6.7 Modern - Ext.grid.Tree selectOnExpander 在节点负载上不起作用
【发布时间】:2019-12-19 22:12:16
【问题描述】:

我正在使用 ExtJS 6.7 Modern 工具包,当从远程服务器加载可扩展节点的数据时,Ext.grid.Tree.selectOnExpander = false 无法正常工作,即当我单击扩展器时选择了节点。

我希望在这种情况下不会像已经加载数据那样选择节点。

检查this fiddle作为插图 - 尝试在加载节点时展开节点,并在尚未加载节点时使用扩展器。


到目前为止,我已经尝试使用Ext.util.Observable.capture 检查触发的事件,似乎触发了额外的childtap 事件。我还不明白为什么。对我来说似乎是一个错误。

【问题讨论】:

    标签: javascript extjs extjs6


    【解决方案1】:

    他们好像忘记实现逻辑了。

    从代码中我建议使用这个 sn-p。 它使用相同的样式扩展了 Ext.dataview.List 的逻辑。

    煎茶小提琴:Fiddle

    Ext.define('Portal.grid.Tree', {
        override: 'Ext.grid.Tree',
    
        shouldSelectItem: function(e) {
            var me = this,
                no = !me.callParent([e]),
                cmp;
    
            if (!no && !me.selectOnExpander) {
                cmp = e.getTarget();
                no = cmp.classList.contains('x-expander-el');
            }
    
            return !no;
        }
    
    });
    
    

    【讨论】:

      【解决方案2】:

      到目前为止,我发现的最佳解决方案是重写 Ext.grid.Tree onChildTap 方法(继承自 Ext.dataview.Abstract),如下所示:

      Ext.define('Portal.grid.Tree', {
          override: 'Ext.grid.Tree',
      
          /** Override Ext.dataview.Abstract onChildTap method for correct processing selectOnExpander property **/
          onChildTap: function(location) {
              if (this.getSelectOnExpander() || location.event.target !== location.cell.expanderElement.dom) {
                  this.callParent(arguments);
              }
          },
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-04
        • 2015-03-17
        相关资源
        最近更新 更多