FLex中Tree与JavaScript交互动态加载数据

    技术2026-01-17  5

         项目中Flex中tree内容要动态改变和加载,但Tree的DataPrivoder只识别<mx:Array>或者<mx:XMLListCollection>,但tree内容要通过javascript动态改变,javascript中没有XML数据类型,如果用Array转换为flex的array或者XMLListCollection非常的麻烦。

     

         想到如果字符串是XML格式的内容,通过javascript将字条串内容传给flex是否支持?通过测试成功!

        代码如下:

    JavaScript代码:

    var SWFLogic = {}; SWFLogic.LayerString ="<folder state='schrodinger' last='unchecked' isBranch='true' label='城六区' code='100'>" + " <folder state='unchecked' last='unchecked' isBranch='false' label='东城区' code='101'/>" + " <folder state='unchecked' last='unchecked' isBranch='false' label='西城区' code='102'/>" + " <folder state='unchecked' last='unchecked' isBranch='false' label='朝阳区' code='103'/>" + " <folder state='unchecked' last='unchecked' isBranch='false' label='海淀区' code='104'/>" + " <folder state='checked' last='unchecked' isBranch='false' label='丰台区' code='105'/>" + " <folder state='checked' last='unchecked' isBranch='false' label='石景山区' code='106'/>" + "</folder>" + "<folder state='schrodinger' last='schrodinger' sBranch='true' label='3维模型' code='200'>" + " <folder state='unchecked' last='unchecked' isBranch='false' label='长安街' code='201'/>" + " <folder state='checked' last='checked' isBranch='false' label='二环路' code='202'/>" + "</folder>"; SWFLogic.GetLayerString = function() { return SWFLogic.LayerString; };

     

    Flex代码:

     <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="188" height="100%" horizontalGap="0" verticalGap="0" creationComplete="init();"> <mx:Script> <!--[CDATA[ import flash.events.Event; import flash.external.ExternalInterface; import mx.collections.*; import mx.events.ListEvent; [Bindable] public var MapLayerList: XMLListCollection; private function init():void { var XMLStr: String = ExternalInterface.call("SWFLogic.GetLayerString"); MapLayerList = new XMLListCollection(new XMLList(XMLStr)); MapLayerTree.dataProvider = MapLayerList; XMLStr = null; } ]]--> </mx:Script> <mx:Tree id="MapLayerTree" click="MapLayerChange()" labelField="@label" width="100%" height="100%" /> </mx:Tree> </mx:Application>

    最新回复(0)