var CheckboxTree = function() {
CheckboxTree.superclass.constructor.call(this, {
renderTo : 'checkboxTree',
title : '所有部門 - ExtJs自帶的例子',
height : 300,
width : 400,
frame : false,
useArrows : true, //是否使用箭頭樣式
autoScroll: true,
animate : true,
enableDD : true,
containerScroll: true,
rootVisible : false,
root: {
nodeType : 'async',
text : '所有部門',
expanded : true,
draggable: false
},
dataUrl : "js/widgets/tree/CheckboxTree.php",
/** 事件監聽 */
listeners: {
'checkchange': function(node, checked){
if(checked) node.getUI().addClass('complete');
else node.getUI().removeClass('complete');
}
},
/** 按鈕組 */
buttons: [{
text: '得到選中節點值',
scope : this,
handler: function(){
var msg = '', selNodes = this.getChecked();
Ext.each(selNodes, function(node){
if(msg.length > 0){
msg += '';
}
msg += node.text;
});
Ext.Msg.show({
title: '選中内容',
msg: msg.length > 0 ? msg : '無選中',
icon: Ext.Msg.INFO,
minWidth: 200,
buttons: Ext.Msg.OK
});
}
}]
});
};
當然,為了達到更好的效果,還定義了一個 ext 事件,用于實作勾選 / 反選父節點時自動勾選 / 反選所有子節點:
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);
});
}, tree);
Ext.extend(CheckboxTree, Ext.tree.TreePanel);
new CheckboxTree();