2014-02-19 2 views
1

проблема

- Я хочу, чтобы сделать структуру иерархического дереваЯ хочу поставить объект в Tree.dataProvider

- получили структуру данных JSON из PHP с помощью API

- пытались использовать " mx.controls.Tree»

- Tree.dataProvider принимает только XML-

- синтаксический анализ JSON к объекту, с помощью JSON.decode() [as3corelib]

- синтаксический анализ объекта в XML с помощью SimpleXMLEncoder.encodeValue() [mx.rpc.xml.SimpleXMLEncoder]

- и это вход Tree.dataProvider


вреда

И тогда я получил это мнение.

Tree view screenshot


Причина

Потом я заметил, что я должен установить метку или что-то представляет собой атрибут XML тега.

Это связано с Tree.labelField = "@ label".


Решение

Таким образом, я думал, что три варианта.

A. Напишите метод, который работает при анализе объекта в XML, добавьте атрибут метки.

B. Напишите динамический XML с атрибутом метки и поместите свойства объекта в XML итеративно.

C. Напишите исходный метод дерева, который может принимать данные объекта или JSON напрямую.


Но

Они так устали, так

D. Вы говорите мне другое хорошее решение.

- лучший способ, котор я думаю.

Как мне это сделать, мастера ActionScript?

Sample code в Evernote (потому что копия & паста из затмений [Flash Builder] так плохо в отступа ...)

ответ

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. JSONtext к объекту с помощью as3corelib.JSON.decode
  3. сканирования и отрезания структуры объекта путем рекурсивного метода (это немного трудно)
  4. создать специфическую JSON для TreeId. dataProvider

MonsterDebugger.trace (это, что-то) - это verrrrrrrrrrrr. новичок, используйте это.

Смежные вопросы