要做:检查孩子应该检查树上的父母,清除父母复选框应该清除所有孩子。
示例:
parent1
--child1
--child2
--subChild1
--subChild2
场景1 :在上述情况下,如果选中 subChild1 ,则还应检查 parent1和child2 。
场景2 :如果选中 parent1 ,则应取消选中其所有子项(已选中)。
从此Check/Uncheck Nodes开始,仅当选择父节点时,才会选择其子节点。
他们是按照我想要的方式实现的,但由于复杂程度足以让我理解,所以无法弄明白(实现)。这就是它reference
请帮我解决此问题。谢谢。感谢任何帮助。
答案 0 :(得分:6)
这就是我所做的。花了一些时间,但它确实有效。
checkchange : function(node, checked, opts) {
function clearNodeSelection(node){
//node is not leaf node
console.log(node);
leafNode = node.raw.leaf;
if(!leafNode){
node.cascadeBy(function(node) {
node.set('checked', false);
})
}
}
if(!checked){
console.log("inside !checked : "+checked);
clearNodeSelection(node);
}
function selectParentNodes(node){
var parentNode = node.parentNode;
if(parentNode){
parentNode.set('checked', true);
selectParentNodes(parentNode);
}
}
selectParentNodes(node);
}
Atlast,谢谢@VDP。 “太棒了”。
答案 1 :(得分:3)
你去! Working fiddle
=>你为checkchange添加一个监听器,检查它是否有childNodes,如果这样设置了childNodes的值
注意:检查数据是否有
checked: false
参数以启用复选框。 (如果不是由后端发送,您可以通过将其添加到模型并将其设置为默认值来强制它)
var store = Ext.create('Ext.data.TreeStore', {
root: {
expanded: true,
children: [
{ text: "detention", leaf: true, checked: false },
{ text: "homework", expanded: true, children: [
{ text: "book report", leaf: true, checked: false },
{ text: "algebra", leaf: true, checked: false}
], checked: false },
{ text: "buy lottery tickets", leaf: true, checked: false }
]
}
});
Ext.create('Ext.tree.Panel', {
title: 'Simple Tree',
width: 200,
height: 150,
store: store,
rootVisible: false,
renderTo: Ext.getBody(),
listeners: {
checkchange: function( node, checked, eOpts ){
if(node.hasChildNodes()){
node.eachChild(function(childNode){
childNode.set('checked', checked);
});
}
}
}
});