對 Ext.tree.TreeNodeUI 進行checkbox功能的擴展,后台返回的結點信息不用非要包含checked屬性
擴展的功能點有:
一、支持只對樹的葉子進行選擇
只有當返回的樹結點屬性leaf = true 時,結點才有checkbox可選
使用時,只需在聲明樹時,加上屬性 onlyLeafCheckable: true 既可,默認是false
二、支持對樹的單選
只允許選擇一個結點
使用時,只需在聲明樹時,加上屬性 checkModel: "single" 既可
二、支持對樹的級聯多選
當選擇結點時,自動選擇該結點下的所有子結點,以及該結點的所有父結點(根結點除外),特別是支持異步,當子結點還沒顯示時,會從后台取得子結點,然后將其選中/取消選中
使用時,只需在聲明樹時,加上屬性 checkModel: "cascade" 既可
三、添加"check"事件
該事件會在樹結點的checkbox發生改變時觸發
使用時,只需給樹注冊事件,如:
tree.on("check",function(node,checked){...});
默認情況下,checkModel為'multiple',也就是多選,onlyLeafCheckable為false,所有結點都可選
使用方法:在loader里加上 baseAttrs:{uiProvider:Ext.tree.TreeCheckNodeUI} 既可.
例如:
var tree = new Ext.tree.TreePanel({
el:'tree-ct',
width:568,
height:300,
checkModel: 'cascade', //對樹的級聯多選
onlyLeafCheckable: false,//對樹所有結點都可選
animate: false,
rootVisible: false,
autoScroll:true,
loader: new Ext.tree.DWRTreeLoader({
dwrCall:Tmplt.getTmpltTree,
baseAttrs: { uiProvider: Ext.tree.TreeCheckNodeUI } //添加 uiProvider 屬性
}),
root: new Ext.tree.AsyncTreeNode({ id:'0' })
});
tree.on("check",function(node,checked){alert(node.text+" = "+checked)}); //注冊"check"事件
//添加監聽 實現復選框的級聯
tree.on('checkchange', function (node, checked) {
node.expand();
node.attributes.checked = checked;
node.eachChild(function (child) {
child.ui.toggleCheck(checked);
child.attributes.checked = checked;
child.fireEvent('checkchange', child, checked);
});
}, fileListTree);