ExtJS 6.7 Modern - Ext.grid.Tree selectOnExpander 在节点加载时不起作用
ExtJS 6.7 Modern - Ext.grid.Tree selectOnExpander doesnt work on node load
我正在使用 ExtJS 6.7 Modern 工具包,当从远程服务器加载可扩展节点的数据时,Ext.grid.Tree.selectOnExpander = false 无法正常工作,即当我单击扩展器时选择了节点。
我希望在这种情况下不会像数据已加载时那样选择节点。
检查 this fiddle 作为示例 - 尝试在节点加载时和尚未加载时使用扩展器展开节点。
到目前为止,我已尝试检查已触发的 Ext.util.Observable.capture and it seems like extra childtap
事件。我还不明白为什么。对我来说似乎是个错误。
到目前为止我找到的最佳解决方案是像这样覆盖 Ext.grid.Tree onChildTap
method (inherited from 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);
}
},
});
他们好像忘了实现逻辑。
根据我建议使用此代码段的代码。
它使用相同的样式扩展了 Ext.dataview.List
的逻辑。
煎茶Fiddle: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;
}
});
我正在使用 ExtJS 6.7 Modern 工具包,当从远程服务器加载可扩展节点的数据时,Ext.grid.Tree.selectOnExpander = false 无法正常工作,即当我单击扩展器时选择了节点。
我希望在这种情况下不会像数据已加载时那样选择节点。
检查 this fiddle 作为示例 - 尝试在节点加载时和尚未加载时使用扩展器展开节点。
到目前为止,我已尝试检查已触发的 Ext.util.Observable.capture and it seems like extra childtap
事件。我还不明白为什么。对我来说似乎是个错误。
到目前为止我找到的最佳解决方案是像这样覆盖 Ext.grid.Tree onChildTap
method (inherited from 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);
}
},
});
他们好像忘了实现逻辑。
根据我建议使用此代码段的代码。
它使用相同的样式扩展了 Ext.dataview.List
的逻辑。
煎茶Fiddle: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;
}
});