2011-01-15 3 views
0

Я пытаюсь прочитать адрес файла flv из xml-файла и затем поместить его в свойство «source» тега видеодисплея. вот мой код:чтение переменной из xml-файла в flex

//in decleration tags 
<fx:Model id="myModel" source="myXML.xml"/> 
<s:ArrayList id="myArrList" source="{myModel.main}"/> 

//in the main code 
<mx:VideoDisplay id="videoDisplay" source="{myArrList.getItemAt(0)}" /> 

и файл XML является:

<main> 
<myFile>"g:\myflv.flv"</myFile> 
</main> 

кто-нибудь знает, что случилось? Тпх

+0

1. Не нужно добавлять двойные кавычки вокруг пути видео в xml 2. Является ли

корневым тегом вашего xml? –

+0

trace myArrList.getItemAt (0), чтобы видеть. – alxx

+0

@Florian: yes main is the root tag – m0j1

ответ

0

На данный момент, это будет работать:

//in decleration tags 
<fx:Model id="myModel" source="myXML.xml"/> 

//in the main code 
<mx:VideoDisplay id="videoDisplay" source="{myModel.mainFile as String}" /> 

Однако, если добавить больше тегов в вашем XML, он не будет работать больше. Экземпляр модели - это экземпляр объекта ObjectProxy. Если есть один тег, инфраструктура Flex создаст ObjectProxy с свойством myFile, которое является строкой. Если существует более одного тега, свойство myFile будет массивом.

Итак, если вы действительно хотите использовать ArrayList экземпляр, не будет иметь никакого другого выбора, кроме как делать что-то подобное:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" 
       applicationComplete="application1_applicationCompleteHandler(event)" 
       > 
    <fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 

      protected function application1_applicationCompleteHandler(event:FlexEvent):void 
      { 
       if (myModel.myFile is Array) 
        myArrList = new ArrayList(myModel.myFile) 
       else 
        myArrList = new ArrayList([myModel.myFile]); 
      } 

     ]]> 
    </fx:Script> 
    <fx:Declarations> 
     <fx:Model id="myModel" source="myXML.xml" /> 
     <s:ArrayList id="myArrList" /> 
    </fx:Declarations> 


</s:Application> 

Кроме того, вы установили отладочную версию Flash Player?

+0

спасибо Флориан, это сработало. но я думаю, что правильный способ сделать это - использовать классы URLRequest и URLLoader. об этом был документ на сайте adobe. и я не установил отладочную версию, и иногда это вызывает проблемы. – m0j1

+0

Да, я настоятельно рекомендую вам установить версию отладки Flash и посмотреть, как работает отладка в Flash Builder. –