【问题标题】:I want to put Object into Tree.dataProvider我想将对象放入 Tree.dataProvider
【发布时间】:2014-02-19 04:45:57
【问题描述】:

问题

-- 我要做层次树结构

-- 通过API从PHP获取JSON数据结构

-- 尝试使用“mx.controls.Tree”

-- Tree.dataProvider 只接受 XML

-- 使用 JSON.decode() [as3corelib] 将 JSON 解析为对象

-- 使用 SimpleXMLEncoder.encodeValue() [mx.rpc.xml.SimpleXMLEncoder] 将 Object 解析为 XML

-- 并输入到 Tree.dataProvider


伤害

然后,我得到了这个观点。

Tree view screenshot


原因

然后我注意到我应该设置标签或代表XML标签属性的东西。

这是因为 Tree.labelField="@label"。


解决方案

因此我想到了三个选择。

A.编写一个解析 Object 到 XML 时起作用的方法,添加 label 属性。

B.编写具有 label 属性的动态 XML,并迭代地将 Object 属性放入 XML。

C.编写可以直接接受Object或JSON数据的原始tree方法。


但是

这些太累了所以

D.你告诉我其他好的解决方案。

是我认为最好的方式。

ActionScript 大师们,我该怎么做?

Sample code 在印象笔记中(因为从 eclipse [flash builder] 复制和粘贴在缩进中非常糟糕......)

【问题讨论】:

    标签: xml json actionscript-3 tree


    【解决方案1】:

    我解决了这个问题,但没有任何答案。所以我为你保留代码。

    private function onCreationComplete(event:FlexEvent):void{
        app = S4M(this.parentApplication);
        var service:HTTPService;
        loadSubsymbols();
    
        // *************************************************
        // generateRequest
        // *************************************************
        function loadSubsymbols():void { 
            service = new HTTPService();
            var action_url:String = "subsymbols.json";
            service.url = api_url + action_url;
            service.method = "GET";
            service.addEventListener(ResultEvent.RESULT, httpResult); 
            service.addEventListener(FaultEvent.FAULT, httpFault);
            service.contentType = "application/json"
            service.headers = { Accept:"application/json" };
            service.send(); 
        } 
    }
    
        // *************************************************
        // connectionSuccess 
        // *************************************************
        private function httpResult(event:ResultEvent):void {
            var json:String = event.result as String;
            var obj:Object = JSON.decode(json);
            var tree:Object = obj.tree;
            treeView.dataProvider = object2json(tree);
            //MonsterDebugger.trace(this, treeView.dataProvider);
            MonsterDebugger.trace(this, treeView.selectedItem.label);
        }
    
        // *************************************************
        // generateJSONfromObject
        // ************************************************* 
        private function object2json(node:Object):Object{
            var name:String = node.name;
            var children:Array = new Array();
            if(isThereChildren(node)){
                for(var child:String in node.children){
                    children.push(object2json(node.children[child]));
                }
            }
    
            if(isThereSubsymbols(node)){
                children.push(object2json(node.subsymbols[0]));
            }
    
            if(doYouHaveSomething(node)){
                return {label: name, children: children}
            }else{
                return {label: name}
            }
        }
    
        private function isThereChildren(nd:Object):Boolean{
            return nd.children
        }
    
        private function isThereSubsymbols(nd:Object):Boolean{
            return nd.subsymbols
        }
    
        private function doYouHaveSomething(nd:Object):Boolean{
            return nd.children || nd.subsymbols
        }
    
        // *************************************************
        // connectionFailure
        // *************************************************
        private function httpFault(event:FaultEvent):void { 
            var faultstring:String = event.fault.faultString; 
            Alert.show(faultstring);
        }
    
    1. 连接 JSON API
    2. 通过 as3corelib.JSON.decode 将 JSONtext 转换为对象
    3. 用递归方法扫描和切割Object结构(这个难度不大)
    4. 为 TreeId.dataProvider 创建特定的 JSON

    MonsterDebugger.trace(this, something) 很好。 新手,用这个。

    【讨论】:

      猜你喜欢
      • 2018-12-06
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多