- 我想制作分层树结构
- 通过API从PHP获得JSON数据结构
- 尝试使用" mx.controls.Tree"
- Tree.dataProvider只接受XML
- 使用JSON.decode()[as3corelib]
将JSON解析为Object- 使用SimpleXMLEncoder.encodeValue()[mx.rpc.xml.SimpleXMLEncoder]将对象解析为XML
- 并输入Tree.dataProvider
然后,我得到了这个观点。
然后我注意到我应该设置标签或者某些东西代表XML标签的属性。
这是因为Tree.labelField =" @ label"。
因此我想了三个选择。
一个。编写一个在将Object解析为XML时有效的方法,添加label属性。
B中。编写具有label属性的动态XML,并迭代地将Object属性放到XML中。
℃。编写可以直接接受Object或JSON数据的原始树方法。
这些太累了所以
d。你告诉我其他好的解决方案。
是我认为最好的方式。
我该怎么做,ActionScript Masters?
Sample code在evernote中(因为来自eclipse [flash builder]的复制和粘贴在缩进中非常糟糕...)
答案 0 :(得分: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);
}
MonsterDebugger.trace(这个,某些东西)是好的。 新手,用这个。