Posted on 2013-07-22 15:33
TWaver 閱讀(1725)
評論(0) 編輯 收藏
TWaver默認的Link只能分組bundle,沒有分層bundle(也就是展開一層后,再展開一層,或合并一層后,再合并一層),因為在多層bundle中,在中間層中,無法自動分辨是想合并還是展開。這里寫個例子,屏蔽了默認的雙擊Link展開或者合并LinkBundle,通過按鈕實現多層bundle(這里實現了兩層的合并或展開)。
TWaver中相同Styles.LINK_BUNDLE_ID才能bundle,所以第一層Link分組設置Styles.LINK_BUNDLE_ID



1 for(var i:int=0; i<4; i++){
2 var link:Link = new Link(node, node2);
3 link.name = "link " + i;
4 if(i%2 == 0){
5 link.setStyle(Styles.LINK_BUNDLE_ID, "bundle1");
6 link.setStyle(Styles.LINK_COLOR, 0xFF0000);
7 }else{
8 link.setStyle(Styles.LINK_BUNDLE_ID, "bundle2");
9 link.setStyle(Styles.LINK_COLOR, 0x0000FF);
10 }
11 box.add(link);
12 }
第一層合并或展開,可以直接使用TWaver方法
1 link.reverseBundleExpanded();
第二層合并,需要記錄上一層的Styles.LINK_BUNDLE_ID,因為在展開時需要恢復原本的Styles.LINK_BUNDLE_ID,并需要設置Styles.LINK_BUNDLE_EXPANDED為false,最后重新設置所有Link的Styles.LINK_BUNDLE_ID為相同的值
1 e.setStyle(Styles.LINK_BUNDLE_ID, e.getClient("original_bundle_id"));
2 e.setStyle(Styles.LINK_BUNDLE_EXPANDED, false);
3 e.setStyle(Styles.LINK_BUNDLE_ID, "bundle");
從完全合并第一次展開的時候,需要恢復原本的
Styles.LINK_BUNDLE_ID,并將所有Link的original_bundle_id設置為null,設置e.setStyle(Styles.LINK_BUNDLE_EXPANDED, false);(展開后為第一層的合并狀態)
1 e.setStyle(Styles.LINK_BUNDLE_ID, e.getClient("original_bundle_id"));
2 e.setClient("original_bundle_id", null);
3 e.setStyle(Styles.LINK_BUNDLE_EXPANDED, false);
見實現方法
1 private function bundle(expand:Boolean):void {
2 var link:Link = network.selectionModel.lastData as Link;
3 if(link == null){
4 return;
5 }
6 if(link.getStyle(Styles.LINK_BUNDLE_EXPANDED)){
7 if(!expand){
8 link.reverseBundleExpanded();
9 }
10 }else{
11 if(expand){
12 if(link.getClient("original_bundle_id") == null){
13 link.reverseBundleExpanded();
14 }else{
15 getSharedLinks(link.fromNode,
16 link.toNode).forEach(function(e:IElement):void {
17 e.setStyle(Styles.LINK_BUNDLE_ID,
18 e.getClient("original_bundle_id"));
19 e.setClient("original_bundle_id", null);
20 e.setStyle(Styles.LINK_BUNDLE_EXPANDED, false);
21 });
22 }
23 }else{
24 getSharedLinks(link.fromNode,
25 link.toNode).forEach(function(e:IElement):void {
26 e.setClient("original_bundle_id",
27 e.getStyle(Styles.LINK_BUNDLE_ID));
28 e.setStyle(Styles.LINK_BUNDLE_ID, "bundle");
29 e.setStyle(Styles.LINK_BUNDLE_EXPANDED, false);
30 });
31 }
32 }
33 }
可以執行文件下載
LinkBundleDemo