заполнение и доступ к данным из объекта значения - PullRequest
3 голосов
/ 01 июля 2010

У меня проблема с загрузкой и доступом к данным из объекта-значения в моем новом проекте. Я загружаю XML-файл через службу, которая содержит заголовок и расположение файлов активов, мне нужно иметь возможность доступа к расположению файл актива, указав заголовок и извлекая его из объекта значения. Я использую среду Robotlegs, вот пример xml:

<?xml version="1.0" encoding="utf-8" ?>
<files id ="xmlroot">
<file title="css_shell"                 location = "css/shell.css"  />
<file title="xml_shell"                 location = "xml/shell.xml"  />
<file title="test"                      location=   "test/location/test.jpg" />
<file title ="shell_background_image"   location = "images/shell_images/background_image.jpg" />
</files>

Затем я помещаю эти данные в объект-значение в виде хэша словаря .. надеюсь,

//-----------  populate value objects ------------------------------------
var xml:XML = new XML(xml);
var files:XMLList = xml.files.file;

for each (var file:XML in files) {
var filePathVO:DataVO = new FilePathVO( file.@title.toString(),
     file.location.toString()
);

 filePathModel.locationList.push(filePathVO);
filePathModel.locationHash[filePathVO.title] = filePathVO;
 }

Я протестировал доступ к этому из компонента представления.

// accessing from another class -----------------

var _background_image_path:String = String( filePathModel.locationHash['shell_background_image']);

возвращает неопределённое .. есть идеи?

1 Ответ

1 голос
/ 01 июля 2010

Вы забыли @ для атрибута местоположения в этой строке:

var filePathVO:DataVO = new FilePathVO(file.@title.toString(),
     file.location.toString());

Настоящая проблема лежит на линии:

var files:XMLList = xml.files.file;

Измените его на

var files:XMLList = xml.file;

Переменная xml относится к корневому тегу xml; нет необходимости обращаться к нему явно с помощью xml.files. xml.files.file фактически ищет file теги, которые являются прямыми потомками тегов files, которые являются прямыми потомками тега root-xml. Это сработало бы, если бы ваш xml был примерно таким:

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <files id ="xmlroot">
    <file title="css_shell" location = "css/shell.css"  />
    <file title="xml_shell" location = "xml/shell.xml"  />
    <file title="test" location=   "test/location/test.jpg" />
    <file title ="shell_background_image" location = "images/shell_images/background_image.jpg" />
  </files>
</root>
...