#xml #apache-flex #urlloader
#xml #apache-flex #urlloader
Вопрос:
Я перепробовал все примеры, которые смог найти, но ничего толком не сработало. Что я ищу для кода actionscript (без использования классов — я хотел бы выполнить весь код в разделе файла mxml) для загрузки в XML-файл, который хранится в том же расположении, что и swf-файл.
Мой XML настроен следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<projects>
<project>
<projName>project1</projName>
<startDate>5/5/2011</startDate>
<positions>
<position>
<startOffset>1</startOffset>
<numDays>4</numDays>
<role>1D</role>
<student>Project 1 - Name 1</student>
</position>
... repeat for however many position pieces there are
</positions>
</project>
... repeat for however many project pieces there are
</projects>
Я хочу прочитать это в виде простого XML (projectsXML для имени переменной), чтобы я мог сделать что-то вроде:
<mx:Repeater id="singleProject" dataProvider="{projectsXML.projects.project}">
<mx:Text id="projectName" text="{singleProject.currentItem.projName}" />
</mx:Repeater>
Что я на самом деле буду делать, так это вызывать компоненты внутри повторителя и передавать переменные, но если я смогу достичь вышеуказанного, я почти уверен, что смогу разобраться с остальным.
Если кто-нибудь может мне здесь помочь, я был бы очень признателен… итак, я могу перестать биться головой о стену : (
Заранее спасибо, Алекс
Ответ №1:
Попробуйте это и посмотрите, работает ли это…
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
minWidth="955" minHeight="600"
creationComplete="{projectsHttp.send()}" layout="vertical">
<mx:HTTPService id="projectsHttp" url="projects.xml" />
<mx:Repeater id="rpt"
dataProvider="{projectsHttp.lastResult.projects.project}" >
<mx:Label text="{rpt.currentItem.projName}" />
</mx:Repeater>
</mx:Application>
Комментарии:
1. когда я пытаюсь включить его в свой код, он не отображается при запуске приложения, у меня есть следующий код: <mx: Canvas width = «100%» height = «95%» x = «0» y = «80»> <mx: Repeater id = «PROJECTTRP» dataProvider=»{projectsHttp.lastResult.projects.project}»> <Block: project OneDay = «{usableSize.width/14}» Заголовок проекта =»{PROJECTTRP.CurrentItem.ProjectName}» projectDate=»{PROJECTTRP.CurrentItem.StartDate}» projectPositions=»{xmlListToArray(projectRP.CurrentItem.positions) в виде массива}» allStudents=»{allStudents}» projectsHttp=»{projectsHttp}» /> </mx: Repeater> </mx:Canvas>
2. Мне трудно разобраться, не зная подробностей о компоненте «project» в приведенном выше фрагменте кода. Также где находится холст по отношению к приложению. Извините , если я не стараюсь быть полезным . 1. у меня сразу возникает вопрос — вы вызываете send ()?
3. Я не совсем уверен, что я сделал, но у меня получилось… теперь я столкнулся с другой проблемой. В моем повторителе, где я вызываю компонент проекта, я передаю это: projectPositions=»{projectRP.CurrentItem.positions.position}»….. в компоненте проекта я объявляю projectPositions как объект. Правильно ли это? Мне нужно иметь возможность перемещаться по projectPositions и видеть каждый элемент в этом объекте.
Ответ №2:
Вы должны использовать HTTPService (или аналогичный метод) для загрузки XML-данных, а затем использовать результат для заполнения вашего списка после его загрузки.
Вот пример: http://blog.flexexamples.com/2008/03/29/dynamically-loading-xml-files-using-the-httpservice-tag /
Класс URLLoader также является опцией вместо HTTPService. Общий метод одинаков для обоих.