对树进行一些操作的后台是Controller类。而RpcController能够以RPC的方式,Json数据传递的方式将前端和后台进行结合。
我们可以查看原代码知道 TreeRPCController 继承于TreeLoadingController,而TreeLoadingController继承于TreeBasicController,TreeBasicController继承HtmlWidget。
我们先对TreeBasicController进行分析:
1:DNDController属性,如果该属性为“create",那么该Controller就具有拖动的功能。
if (this.DNDController == "create") {
dojo.require("dojo.dnd.TreeDragAndDrop");
this.DNDController = new dojo.dnd.TreeDNDController(this);
}
2:dieWithTree:表示当树Destroy,Controller是否同时Destroy。
3:listenTree:将Controller绑定Tree的4个事件,如果DNDController存在,也同时绑定Tree的时间。
createDOMNode,treeClick,treeCreate,treeDestroy。
比如:两个绑定的原代码:
onCreateDOMNode: function(message) {
var node = message.source;
if (node.expandLevel > 0) {
this.expandToLevel(node, node.expandLevel);
}
},
// perform actions-initializers for tree
onTreeCreate: function(message) {
var tree = message.source;
var _this = this;
if (tree.expandLevel) {
dojo.lang.forEach(tree.children,
function(child) {
_this.expandToLevel(child, tree.expandLevel-1)
}
);
}
},
4:改controller还提供了canMove,canRemoveNode,canCreateChild等方法判断是否能够移动节点,删除节点和创建子节点。移动节点的方法是move,在move方法体里面,首先调用canMove,判断是否能够移动,然后是调用doMove方法执行具体的移动,move方法返回true或false。其它删除和创建同理。
三个方法签名如下:
move: function(child, newParent, index)
removeNode: function(node, callObj, callFunc)
createChild: function(parent, index, data, callObj, callFunc)
未完...
posted on 2006-11-22 22:36
不做浮躁的人 阅读(1324)
评论(1) 编辑 收藏