TreePanel checkbox連動
転載元: http://www.cnblogs.com/KingStar/archive/2010/06/10/1755299.html
クラシックなcheckboxツリーはデフォルトでは連動処理がありません。ここに変数INDEX(u)がありますCATEGORY_CHECKINGは、各ノードイベントのトリガ後の再帰的呼び出しを回避するために、再帰的な問題を解決しすぎた。
クラシックなcheckboxツリーはデフォルトでは連動処理がありません。ここに変数INDEX(u)がありますCATEGORY_CHECKINGは、各ノードイベントのトリガ後の再帰的呼び出しを回避するために、再帰的な問題を解決しすぎた。
'checkchange': function(node, checked){
if (!INDEX_CATEGORY_CHECKING) {
INDEX_CATEGORY_CHECKING = true;
// true , ,
if (checked == true) {
node.attributes.checked = true;
// true,
(function(node) {
var _this = arguments.callee;
if (!node.isLeaf()) {
node.expand();
node.eachChild(function(child) {
child.ui.toggleCheck(true);
child.attributes.checked = true;
_this.call(_this, child);
});
}
})(node);
// true, ( ) true
(function(node) {
var _this = arguments.callee;
if (node.parentNode && node.parentNode != t.root) {
var pnode = node.parentNode;
pnode.ui.toggleCheck(true);
pnode.attributes.checked = true;
_this.call(_this, pnode);
}
})(node);
} else { // false , ,
node.attributes.checked = false;
// false,
(function(node) {
var _this = arguments.callee;
if (!node.isLeaf()) {
node.expand();
node.eachChild(function(child) {
child.ui.toggleCheck(false);
child.attributes.checked = false;
_this.call(_this, child);
});
}
})(node);
// false, ( )
(function(node) {
var _this = arguments.callee;
if (node.parentNode && node.parentNode != t.root) {
var pnode = node.parentNode;
var chk = false;
pnode.eachChild(function(child) {
if (child.attributes.checked == true) {
chk = true;
return false;
}
});
if (chk == true) {
return;
} else {
pnode.ui.toggleCheck(false);
pnode.attributes.checked = false;
_this.call(_this, pnode);
}
}
})(node);
}
INDEX_CATEGORY_CHECKING = false;
}
}