Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   XML и компоненты flash8 pro (http://www.flasher.ru/forum/showthread.php?t=107276)

LevinSoft 29.01.2008 07:33

XML и компоненты flash8 pro
 
Люди добрые! Помогите ПЛЗ!!!
Пытаюсь передать данные из xml-файла в MediaController и в DataGrid. Ниче не получается.
Вот скрипт:
Код HTML:

//загружаю во Флэш файл с указателями на трэки
var songs_xml:XML = new XML();
songs_xml.ignoreWhite = true;
songs_xml.onLoad = function(success:Boolean) {
        if (success) {
                library.dataProvider = this.firstChild;
        } else {
                trace("unable to load/parse library.xml");
        }
};
songs_xml.load("library.xml");


// все содержимое XML-файла ложится в Tree и при событии
//SelectedNode должно упасть в MediaController
var treeListener:Object = new Object();
treeListener.change = function(evt:Object) {
        var selectedMP3:XMLNode = evt.target.selectedNode;
        if (evt.target.getIsBranch(selectedMP3)) {
                evt.target.setIsOpen(selectedMP3, !evt.target.getIsOpen(selectedMP3), true);
        } else {
                var song_title:Object = new Object();
                song_title = (selectedMP3.attributes.src);
                updateplay_mediaconStats();
library.addEventListener("change", treeListener);

// тут по идее должно загрузиться содержимое объекта song_title
function playSong() {
        //var thisSong:Object = song_title;
        //stopAllSounds();
        play_mediacon.setMedia(song_title);
        trace(play_mediacon.setMedia);
//однако trace(play_mediacon.setMedia); вообще не появляется, следовательно в функцию ничего не приходит.
        play_mediacon._playerImpl._sound.onID3 = function() {
                //photos_lbl.text = this.id3.artist+" -- "+this.id3.songname+" ("+thisSong.length+")";
                var id3_str:String = new String();
                id3_str = "<textformat tabstops='[70]'>";
                id3_str += "<b>Song:</b>\t"+this.id3.songname+newline;
                id3_str += "</textformat>";
        };
        play_mediacon.play(1);
        //photos.cover_ldr.load(thisSong.cover);
}

Примерно то же самое пытаюсь сделать с DataGrid, но не знаю как добавить в нее данные автоматически.

Код HTML:

// осздаю таблицу, в которую потом буду ложить записи из xml-файла
this.createClassObject(DataGrid, "library", 200, {_x:10, _y:95});
library.setSize(150,410);
var title_lib:DataGridColumn = new DataGridColumn("title");
title_lib.headerText = "Title:";
title_lib.width = 300;
library.addColumn(title_lib);
library.addEventListener("change", libraryListener);

//собственно, сам скрипт подгрузки xml-файла
var songs_xml:XML = new XML();
songs_xml.ignoreWhite = true;
songs_xml.onLoad = function(success:Boolean) {
        if (success) {
                library.dataProvider = this.firstChild;
        } else {
                trace("unable to load/parse test_library.xml");
        }
};
songs_xml.load("test_library.xml");

var LibraryListener:Object = new Object();
LibraryListener.change = function(evt:Object) {
        var selectedMP3:XMLNode = evt.target.[color="Red"]SelectedItem[/color];// но это работает если
//откуда нибудь руками добавлять, а как сделать чтоб при загрузке
//мувика это происходило - не знаю
        if (evt.target.getIsBranch(selectedMP3)) {
                evt.target.setIsOpen(selectedMP3, !evt.target.getIsOpen(selectedMP3), true);
        } else {
                library.addItem({title:selectedMP3.attributes['label'], src:selectedMP3.attributes['src']});
                updatelibraryStats();
        }
};
library.addEventListener("change", DataGridListener);

Потом все содержимое DataGrid'а должно также передаться в MediaController. Это то как раз у меня получилось, вопрос остался как в таблицу положить контетнт.

Еще одна проблема - создал Accordion, в нем 3 вкладки. Как положить из XML'я в него на вкладку текст, чтоб он был отформатированный как в исходном файле, и мог прокручиваться. Создал TextArea, в него то я положил текст, но все форматирование пропало, и если _height поля больше чем _height accordion'а, то полосы прокрутки не появляются и поле попросту уходит на пределы вкладки.

Помогите пожалуйста! Очень помощь нужна, в хэлпах таких замут не найти это факт, а спросить не у кого. :confused: Мне сдавать надо отчет по диплому, а у мну не работает нифига. Выгонют из универа нафиг :o

Заранее всем большое спасибо!

CorC 29.01.2008 10:07

Цитата:

Сообщение от LevinSoft
library.dataProvider = this.firstChild;

Ну вы загнули! Уж не поленитесь распарсте сначала хмл в массив а потом уже в провайдер пехайте, тогда и получится.
Можно конечно сразу по срокам при парсении пехать атрибуты в addItem

LevinSoft 30.01.2008 07:27

CorC, а как это правильно сделать? Как сам код должен выглядеть?

LevinSoft 30.01.2008 09:11

Вот нашел функцию, которая вроде как парсит XML, тока че то толку от этого больше не стало...

Код HTML:

loadXML = function() {
var songs_xml:XML = new XML();
songs_xml.ignoreWhite = true;
//library.dataProvider = this.firstChild;
songs_xml.load("test_library.xml");
};
parseXML = function() {
        if (songs_xml.hasChildNodes) {
                var xmlRootNode = myXMLfirstChild.childNodes;
                for (var i = 0; i < xmlRootNode.length; i++) {
                        var thisNode = xmlRootNode[i];
                        if (thisNode != null) {
                                var strDep = thisNode.childNodes[0].firstChild.nodeValue;
                                var strSales = thisNode.childNodes[1].firstChild.nodeValue;
                                var strEmpl = thisNode.childNodes[2].firstChild.nodeValue;
                                arrlibrary.push ({Dep:strDep,Sales:strSales,Employees:strEmpl});
                        }
                }
        }
library.dataProvider = arrlibrary;
}


CorC 30.01.2008 10:06

Цитата:

Сообщение от LevinSoft
CorC, а как это правильно сделать? Как сам код должен выглядеть?

Ну ваш же хмл, вы должны знать как он устроен. В слепую же код не напишешь.
Попробуйте trace и добавлять в цикле по 1 элементу addItem

LevinSoft 30.01.2008 10:13

Код HTML:

- <node>
  <node label="Song1" src="song1.mp3" artist="Macromedia" album="Tragic Sounds" track="1" length="0:14" cover="images/cover.jpg" />
  <node label="Song2" src="song2.mp3" artist="Macromedia" album="Tragic Sounds" track="2" length="0:08" cover="images/cover.jpg" />
  <node label="Song3" src="song3.mp3" artist="Macromedia" album="Tragic Sounds" track="3" length="0:08" cover="images/cover.jpg" />
  </node>

Вот так устроен мой XML. В том то и проблема, что я не могу добавить ни одного элемента во флэш

CorC 30.01.2008 10:32

Нужно еще раз прочитать про ХМЛ и нормально распарсить, а не брать чужие скрипты. Проверяйте при помощи trace что вы получаете

alexcon314 30.01.2008 13:02

xml можно загнать в датагрид так:
Код:

var xml = new XML("<node a='sss' b='dd'/><node a='sss' b='dd'/><node a='sss' b='dd'/><node a='sss' b='dd'/><node a='sss' b='dd'/>");
dg.addColumn('a');
dg.addColumn('b');
dg.dataProvider = xml.childNodes;


LevinSoft 31.01.2008 07:30

alexcon314, Поясни плиз, почему строчек
Код:

<node a='sss' b='dd'/>
так много? Это соответствует количеству записей в файле?

alexcon314 31.01.2008 08:55

это "линейный" xml, т.е. просто список из энного количества строк
Код:

<node a='sss' b='dd'/>
<node a='sss' b='dd'/>
<node a='sss' b='dd'/>
<node a='sss' b='dd'/>
<node a='sss' b='dd'/>

это эквивалентно массиву (собственно, это и есть массив объектов), пригодному для загрузки в датагрид через dg.dataProvider=..
Код:

{a:'sss', b:'dd'}
{a:'sss', b:'dd'}
{a:'sss', b:'dd'}
{a:'sss', b:'dd'}
{a:'sss', b:'dd'}

если список линейный, т.е. без вложений, то не надо ничего "парсить", вот что я хотел сказать. просто загружаете xml и пихаете его в датагрид как есть.
если список с вложениями (дерево), например, есть разделы, подразделы и пр., предлагается использовать компонент Tree, который тоже кстати хавает чистый xml в качестве dataProvider'a.


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

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