對樹進行一些操作的后臺是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
不做浮躁的人 閱讀(1327)
評論(1) 編輯 收藏