Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.01.2008, 07:33
LevinSoft вне форума Посмотреть профиль Отправить личное сообщение для LevinSoft Найти все сообщения от LevinSoft
  № 1  
Ответить с цитированием
LevinSoft
[+1 14.04.08]

Регистрация: Oct 2007
Сообщений: 29
Отправить сообщение для LevinSoft с помощью ICQ
Question 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'а, то полосы прокрутки не появляются и поле попросту уходит на пределы вкладки.

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

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


Последний раз редактировалось LevinSoft; 29.01.2008 в 07:37.
Старый 29.01.2008, 10:07
CorC вне форума Посмотреть профиль Отправить личное сообщение для CorC Найти все сообщения от CorC
  № 2  
Ответить с цитированием
CorC
 
Аватар для CorC

Регистрация: Jul 2006
Адрес: Земля>Россия>Вологда
Сообщений: 3,056
Отправить сообщение для CorC с помощью ICQ Отправить сообщение для CorC с помощью MSN Отправить сообщение для CorC с помощью Skype™
Цитата:
Сообщение от LevinSoft
library.dataProvider = this.firstChild;
Ну вы загнули! Уж не поленитесь распарсте сначала хмл в массив а потом уже в провайдер пехайте, тогда и получится.
Можно конечно сразу по срокам при парсении пехать атрибуты в addItem
__________________
"We Are The Champions My Friends!" Queen

Старый 30.01.2008, 07:27
LevinSoft вне форума Посмотреть профиль Отправить личное сообщение для LevinSoft Найти все сообщения от LevinSoft
  № 3  
Ответить с цитированием
LevinSoft
[+1 14.04.08]

Регистрация: Oct 2007
Сообщений: 29
Отправить сообщение для LevinSoft с помощью ICQ
CorC, а как это правильно сделать? Как сам код должен выглядеть?

Старый 30.01.2008, 09:11
LevinSoft вне форума Посмотреть профиль Отправить личное сообщение для LevinSoft Найти все сообщения от LevinSoft
  № 4  
Ответить с цитированием
LevinSoft
[+1 14.04.08]

Регистрация: Oct 2007
Сообщений: 29
Отправить сообщение для LevinSoft с помощью ICQ
Вот нашел функцию, которая вроде как парсит 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;
}

Старый 30.01.2008, 10:06
CorC вне форума Посмотреть профиль Отправить личное сообщение для CorC Найти все сообщения от CorC
  № 5  
Ответить с цитированием
CorC
 
Аватар для CorC

Регистрация: Jul 2006
Адрес: Земля>Россия>Вологда
Сообщений: 3,056
Отправить сообщение для CorC с помощью ICQ Отправить сообщение для CorC с помощью MSN Отправить сообщение для CorC с помощью Skype™
Цитата:
Сообщение от LevinSoft
CorC, а как это правильно сделать? Как сам код должен выглядеть?
Ну ваш же хмл, вы должны знать как он устроен. В слепую же код не напишешь.
Попробуйте trace и добавлять в цикле по 1 элементу addItem
__________________
"We Are The Champions My Friends!" Queen

Старый 30.01.2008, 10:13
LevinSoft вне форума Посмотреть профиль Отправить личное сообщение для LevinSoft Найти все сообщения от LevinSoft
  № 6  
Ответить с цитированием
LevinSoft
[+1 14.04.08]

Регистрация: Oct 2007
Сообщений: 29
Отправить сообщение для LevinSoft с помощью ICQ
Код 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. В том то и проблема, что я не могу добавить ни одного элемента во флэш

Старый 30.01.2008, 10:32
CorC вне форума Посмотреть профиль Отправить личное сообщение для CorC Найти все сообщения от CorC
  № 7  
Ответить с цитированием
CorC
 
Аватар для CorC

Регистрация: Jul 2006
Адрес: Земля>Россия>Вологда
Сообщений: 3,056
Отправить сообщение для CorC с помощью ICQ Отправить сообщение для CorC с помощью MSN Отправить сообщение для CorC с помощью Skype™
Нужно еще раз прочитать про ХМЛ и нормально распарсить, а не брать чужие скрипты. Проверяйте при помощи trace что вы получаете
__________________
"We Are The Champions My Friends!" Queen

Старый 30.01.2008, 13:02
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 8  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
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;

Старый 31.01.2008, 07:30
LevinSoft вне форума Посмотреть профиль Отправить личное сообщение для LevinSoft Найти все сообщения от LevinSoft
  № 9  
Ответить с цитированием
LevinSoft
[+1 14.04.08]

Регистрация: Oct 2007
Сообщений: 29
Отправить сообщение для LevinSoft с помощью ICQ
alexcon314, Поясни плиз, почему строчек
Код:
<node a='sss' b='dd'/>
так много? Это соответствует количеству записей в файле?

Старый 31.01.2008, 08:55
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 10  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
это "линейный" 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, время: 14:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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