Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   mx:Tree и CDATA (http://www.flasher.ru/forum/showthread.php?t=108966)

Алан 04.03.2008 17:38

mx:Tree и CDATA
 
Добрый день!

Я пытаюсь сделать простейшую админку для flash сайта. XML с исходными данными отображается с помощью mx:Tree, и далее по идее текст выделенного узла отправляется в RichTextEditor.
Все работает, когда в качестве treeLabel используются аттрибуты XML. Однако, основной текст идет с html-разметкой, в теле CDATA, и в этом случае содержимое tree не обновляется.

Исходный код:

Код:

<?xml version="1.0" encoding="utf-8"?>
<!-- Контрольная панель -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        creationComplete="loadSource()"
        >

    <mx:Script>
        <![CDATA[
                        import utils.CDATA;
                        import mx.collections.XMLListCollection;
                       
            [Bindable]
            public var selectedNode:XML;           
            public var loaderData:XML;
           
            [Bindable]
            public var viewEntry:String;
            public var newText:String;
           
            [Bindable]
            public var debugText:String;
            public var item:XML;
            public var loader:URLLoader=new URLLoader();
           
            [Bindable]
            private var siteData:XMLListCollection;   
            public var source:URLRequest=new URLRequest("data/xml/data.xml");
           
            public function treeChanged(event:Event):void {
                selectedNode=Tree(event.target).selectedItem as XML;
                if(selectedNode.nodeKind()=="text")
                {                       
                        editor.htmlText=selectedNode;                       
                       
                }else{
                       
                        editor.htmlText=selectedNode.@alias
                       
                }
            }
           
           
           
            public function textChanged(event:Event):void
            {
                    var currentItem:XML=XML(siteTree.selectedItem);
                                     
                    if(currentItem.nodeKind()=="text")
                {           
                       
                        newText=event.target.htmlText;
                        //CDATA.make() преобразует строку и добавляет теги CDATA                       
                        currentItem=XML(CDATA.make(newText));
                       
                }else{             
               
                                               
                        newText=event.target.text;                       
                        currentItem.@alias=newText;
                       
                       
                }
            }
           
            public function loadSource():void
            {                   
                    loader.load(source);
                    loader.addEventListener(Event.COMPLETE,handleXML);
            }
           
            public function handleXML(event:Object):void
            {
                    loaderData=XML(loader.data);
                    siteData=new XMLListCollection(loaderData.project.language);
            }
           
            private function treeLabel(item:Object):String {
                var node:XML = XML(item);
               
                if( node.nodeKind()=="text")
                    return node;
                else
                    return node.@alias;
            }


           
        ]]>
    </mx:Script>

   
    <mx:Panel title="Панель управления" height="95%" width="95%"
        paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10">

        <mx:Label width="100%" color="blue"
            text="Выберите раздел"/>

        <mx:HDividedBox width="100%" height="100%">
            <mx:Tree
                    id="siteTree"
                    width="50%"
                    height="100%"
                    labelFunction="treeLabel"
                showRoot="true"
                dataProvider="{siteData}"               
                change="treeChanged(event)"/>
           
            <mx:RichTextEditor
                    id="editor"
                    title="Редактор"
                    height="100%" width="50%"
                    text="Ожидание..."
                    change="textChanged(event)"
                    />
                   
          <mx:TextArea
                  width="100%"
                  height="50%"
                  text="{debugText}"
                  >
                 
          </mx:TextArea>
                   
        </mx:HDividedBox>
       
    </mx:Panel>
</mx:Application>

И здесь то что получается в итоге:
http://www.project47.ru/dev/testap/AD.html

Заранее извиняюсь за возможные неконструктивности в коде. Я совсем новичок во flex.


Часовой пояс GMT +4, время: 10:22.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.