Не так давно обнаружил, что в интернете, дефицит статей об использовании JSON и Adobe Flex. В связи с этим решил немножко исправить положение и описать компонент «Tree» с поставщиком данных в виде JSON.
И так, давайте начнем самого необходимого, с серверной части.
Создадим php-файл, к которому в последствии и будем мы обращаться:
Следует обратить внимание, на то, что это массив массивов, каждый подраздел сопровождается нодом – «children». Каждый элемент, описан отдельным массивом и должен содержать одно и тоже название поля для заголовков дерева. Если в раздел, который имеет ребенка, необходимо добавить еще одно поле(Например в Outbox, поле descript), то это нужно делать исключительно, после описания самого ребенка.
На выходе получаем следующие содержание:
Это и есть необходимый формат, с которым мы в дальнейшем и будем работать(Очень важно, что бы структура была той же, «children» — название менять нельзя, отвечает за вложенные ветки, label за заголовок,
descript – за описание).
Пример того же содержания(за исключением поля descript), только на XML:
Примечание: На примере видно, что дети тут обозначаются по другому. Если перевести этот xml в json, работать не будет.
Теперь приступим непосредственно к написание приложения и чтению комментариев, для понятности:
Статья написана в помощь новичкам, и тем кто никогда не работал с JSON.
Список литературы и необходимых библиотек:
Для тех кто незнаком с as3corelib ссылка где её можно скачать:
github.com/mikechambers/as3corelib
И небольшое знакомство с её возможностями относительно JSON:
garbage-collector.ru/docs/flex/JSON_flex2.pdf
И так, давайте начнем самого необходимого, с серверной части.
Создадим php-файл, к которому в последствии и будем мы обращаться:
-
-
- <?php
- $arr = array( //Создадим масив $arr с необходимой структурой.
- array(
- "label"=>"Mail Box",
- "children"=>array(
- array(
- "label"=>"Inbox",
- "children"=>array(
- array(
- "label"=>"Marketing",
- "descript"=>"Marketing box"
- ),
- array(
- "label"=>"Product Management",
- "descript"=>"Product Management Box"
- ),
- array(
- "label"=>"Personal",
- "descript"=>"Personal Box"
- ),
- ),
- "descript"=>"My Inbox Messages"
- ),
-
- array(
- "label"=>"Outbox",
- "children"=>array(
- "label"=>"Professional",
- "descript"=>"Professional messages"
- ),
- "descript"=>"My outbox messages"
- ),
- array(
- "label"=>"Personal",
- "descript"=>"Personal Note"
- ),
- array(
- "label"=>"Spam",
- "descript"=>"Stupid Spam"
- ),
- array(
- "label"=>"Sent",
- "descript"=>"Sents messages"
- ),
- ),
- "descript"=>"Mail Box Maneger"
- ),
- );
- print json_encode ($arr);?> // Переводим $arr в JSON и возвращаем.
-
Следует обратить внимание, на то, что это массив массивов, каждый подраздел сопровождается нодом – «children». Каждый элемент, описан отдельным массивом и должен содержать одно и тоже название поля для заголовков дерева. Если в раздел, который имеет ребенка, необходимо добавить еще одно поле(Например в Outbox, поле descript), то это нужно делать исключительно, после описания самого ребенка.
На выходе получаем следующие содержание:
-
- [
- {
- "label":"Mail Box",
- "children":
- [
- {
- "label":"Inbox",
- "children":
- [
- {
- "label":"Marketing",
- "descript":"Marketing box"
- },
- {
- "label":"Product Management",
- "descript":"Product Management Box"
- },
- {
- "label":"Personal",
- "descript":"Personal Box"
- }
- ],
- "descript":"My Inbox Messages"
- },
- {
- "label":"Outbox","children":
- {
- "label":"Professional",
- "descript":"Professional messages"
- },
- "descript":"My outbox messages"
- },
- {
- "label":"Personal",
- "descript":"Personal Note"
- },
- {
- "label":"Spam",
- "descript":"Stupid Spam"
- },
- {
- "label":"Sent",
- "descript":"Sents messages"
- }
- ],
- "descript":"Mail Box Maneger"
- }
- ]
-
Это и есть необходимый формат, с которым мы в дальнейшем и будем работать(Очень важно, что бы структура была той же, «children» — название менять нельзя, отвечает за вложенные ветки, label за заголовок,
descript – за описание).
Пример того же содержания(за исключением поля descript), только на XML:
-
- <node label="Mail Box">
- <node label="Inbox">
- <node label="Marketing"/>
- <node label="Product Management"/>
- <node label="Personal"/>
- </node>
- <node label="Outbox">
- <node label="Professional"/>
- <node label="Personal"/>
- </node>
- <node label="Spam"/>
- <node label="Sent"/>
- </node>
-
Примечание: На примере видно, что дети тут обозначаются по другому. Если перевести этот xml в json, работать не будет.
Теперь приступим непосредственно к написание приложения и чтению комментариев, для понятности:
-
- <?xml version="1.0" encoding="utf-8"?>
- <!-- Tree control example with JSON. -->
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" preinitialize="serv.send()">// До начала загрузки компонентов, отправляем запрос на получение данных
- <mx:Script>
-
-
- <![CDATA[
- import mx.rpc.events.ResultEvent;//Импортируем необходимые библиотеки,
- import com.adobe.serialization.json.JSON;//а так же библиотеку для работы с JSON.
- import mx.collections.ArrayCollection;// Именно с Коллекцией масивов мы и будем работать.
- [Bindable]
- public var selectedNode:Object; //Создаем объект, для работы с событиями select
- public function treeChanged(evt:Event):void { // Функция для отлова события select.
- selectedNode=Tree(evt.target).selectedItem as Object;
- }
- public function tree(event:ResultEvent){ //Ловим результат работы HTTPService
- var rawData:String = String(event.result); //Сохраняем результат в строку
- var arr:Array = (JSON.decode(rawData) as Array);//Декодируем строку в масив
- var collection:ArrayCollection = new ArrayCollection(arr);//Создаем коллекцию массивов arr.
- myTree.dataProvider=collection; //Загружаем в поставщик данных коллекцию «collection».
- }
- ]]>
-
-
-
- </mx:Script>
- <mx:Panel title="Tree Control Example with JSON" height="75%" width="75%"
- paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10">
- <mx:Label width="100%" color="blue"
- text="Select a node in the Tree control."/>
- <mx:HDividedBox width="100%" height="100%">
- <mx:Tree id="myTree" width="50%" height="100%" labelField="label"
- showRoot="true" change="treeChanged(event)"/> //Создаем дерево, в поле
- <mx:TextArea height="100%" width="50%" //labelField указываем ключ заголовка.
- text="Selected Item:{selectedNode.descript}"/>//change – маякуем об изменениях
- </mx:HDividedBox>
- </mx:Panel>
- <mx:HTTPService url="http://домен/ваш_php_файл.php" id="serv" resultFormat="text" result="tree(event)"> //HTTPService с помощью которого мы получем данные в функцию tree.
- </mx:HTTPService>
- </mx:Application>
-
Статья написана в помощь новичкам, и тем кто никогда не работал с JSON.
Список литературы и необходимых библиотек:
Для тех кто незнаком с as3corelib ссылка где её можно скачать:
github.com/mikechambers/as3corelib
И небольшое знакомство с её возможностями относительно JSON:
garbage-collector.ru/docs/flex/JSON_flex2.pdf