Форум 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 файла (http://www.flasher.ru/forum/showthread.php?t=114576)

jakim_denis 02.08.2008 18:20

Создание динамических текстовых полей согласно содержимому XML файла
 
добрый день!
Подскажите пожалуста, как работая с вот таким XML:
Код:


<datapacket>
<row pID="1" Business="Business1" Address="Address 1" Telephone="12345" Website="http://www.b1.com" Email="email1@something.com" Details="some text for Details." Picture="image1.jpg"/>
<row pID="2" Business="Business2" Address="Address 2" Telephone="67879" Website="http://www.b2.com" Email="email2@something.com" Details="some more text for Details." Picture="image2.jpg"/>
<row pID="3" Business="Business3" Address="Address 3" Telephone="010203" Website="http://www.b2.com" Email="email3@something.com" Details="and some more text for Details." Picture="image3.jpg"/>
</datapacket>

Для каждого ROW создать отдельное динамическое текстовое поле шириной скажем 200px/висотой 400px и выстроить из по горезонтали на подобии http://www.x3studios.com/en/

Какую логистику и инструментарий для этого лутше использовать?

Разбирался как обрабатывать XML согласно вот этого мануала. http://www.adobe.com/devnet/flash/ar...php_print.html

Зарание прошу извенить за скорее всего глупый вопрос новичка )))

Wolsh 02.08.2008 18:33

Так и не понял, что именно у Вас не получилось. Покажите Ваш код.

jakim_denis 02.08.2008 18:43

Цитата:

Сообщение от Wolsh (Сообщение 755948)
Так и не понял, что именно у Вас не получилось. Покажите Ваш код.

ну у меня пока что не то чтобы не получилось ) Я просто хочу вокруг монитора и незнаю с какого боку подойти к решению такой задачи и какой инструментарий стоит для этого использовать.

jakim_denis 02.08.2008 20:26

Цитата:

Сообщение от Wolsh (Сообщение 755948)
Так и не понял, что именно у Вас не получилось. Покажите Ваш код.

Перерывши форумы пришол к такому:
В данный момент я работаю с таким кодом:
Код:

Stage.align = "LT";
Stage.scaleMode = "noScale";
embedFonts = true;

headlineXML = new XML();

headlineXML.onLoad = myLoad;
headlineXML.load("headlines.xml");

function myLoad(ok) {
        if (ok == true) {
                Publish(this.firstChild);
        }
}

function Publish(HeadlineXMLNode) {
        if (HeadlineXMLNode.nodeName.toUpperCase() == "BROADCAST") {
                content = "<b>List:</b><br><br>";
                story = HeadlineXMLNode.firstChild;
                while (story != null) {
                        if (story.nodeName.toUpperCase() == "STORY") {
                                lead = "";
                                body = "";
                                URL = "";
                                element = story.firstChild;
                                while (element != null) {
                                       
                                        if (element.nodeName.toUpperCase() == "LEAD") {
                                                lead = element.firstChild.nodeValue;
                                        }
                                        if (element.nodeName.toUpperCase() == "BODY") {
                                                body = element.firstChild.nodeValue;
                                        }
                                        if (element.nodeName.toUpperCase() == "URL") {
                                                URL = element.firstChild.nodeValue;
                                        }
                                        element = element.nextSibling;
                                }
                                content += "<a href='"+URL+"'>"+lead+"</a><br>"+body+"<br><br>";
                                createTextField("dynamic_txt", 10, 0, 0, 150, 30);
                                dynamic_txt.border = true;
                                dynamic_txt.html = true;
                                dynamic_txt.autoSize = true;
                                dynamic_txt.htmlText=content;
                        }
                        story = story.nextSibling;
                }
        }
}

Для XML:
Код:

<broadcast>
<story>
<lead>This is Headline 1</lead>
<body>This is where you can add content that will appear under the first headline</body>
<URL>http://www.communitymx.com/</URL>
</story>

<story>
<lead>This is Headline 2</lead>
<body>This is content that can appear under the second headline.</body>
<URL>http://www.flash-remoting.com/</URL>
</story>
</broadcast>

Данный код создает TextField и вставляет в него все содержимое XML, мне же необходимо для каждого <story> создать отдельный и выстроить их один за другим по горизонтали.
Надеюсь я движусь в правильном русле

Wolsh 02.08.2008 22:14

Уже лучше)
У Вас получается один текстфилд, потому что Вы создаете его (думаете что их) на одной глубине. А на одной глубине может быть только один объект. Значит надо ввести счетчик нодов и использовать его значение для управления глубиной и заодно координатой по горизонтали.
Перед циклом while вставим объявление переменной - нашего счетчика
Код:

var counter:Number = 0;
А в теле цикла, при создании текстфилда, воспользуемся им
Код:

content += "<a href='"+URL+"'>"+lead+"</a><br>"+body+"<br><br>";
createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);
counter+=1; // увеличиваем значение счетчика


jakim_denis 03.08.2008 15:52

Я логистику решение задачи понял.
Спасибо огромное!
Еще маленький вопрос:
Подскажите, а какой синтаксис правильно использовать для
Код:

dynamic_txt.border = true;
dynamic_txt.html = true;
dynamic_txt.autoSize = true;
dynamic_txt.htmlText=content;

чтоб дать им имена dynamic1_txt ....... dynamicX_txt ?

Wolsh 03.08.2008 17:44

Ну например так
Код:

var _txt:TextField = this["dynamic"+counter+"_txt"];
_txt.html = _txt.autoSize = true;
_txt.htmlText=content;

или делаем ссылку сразу при создании (если возможно)
Код:

var _txt:TextField = this.createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);
_txt.html = _txt.autoSize = true;
_txt.htmlText=content;
counter+=1; // увеличиваем значение счетчика


jakim_denis 03.08.2008 17:54

я пробовал - но что-то кажись тогда не так с скриптом в целом (
Код:
Код:

Stage.align = "LT";
Stage.scaleMode = "noScale";
embedFonts = true;

headlineXML = new XML();

headlineXML.onLoad = myLoad;
headlineXML.load("headlines.xml");

function myLoad(ok) {
        if (ok == true) {
                Publish(this.firstChild);
        }
}

function Publish(HeadlineXMLNode) {
        if (HeadlineXMLNode.nodeName.toUpperCase() == "BROADCAST") {
                content = "";
                story = HeadlineXMLNode.firstChild;
                while (story != null) {
                        if (story.nodeName.toUpperCase() == "STORY") {
                                lead = "";
                                body = "";
                                URL = "";
                                element = story.firstChild;
                                var counter:Number = 0;
                                while (element != null) {
                                       
                                        if (element.nodeName.toUpperCase() == "LEAD") {
                                                lead = element.firstChild.nodeValue;
                                        }
                                        if (element.nodeName.toUpperCase() == "BODY") {
                                                body = element.firstChild.nodeValue;
                                        }
                                        if (element.nodeName.toUpperCase() == "URL") {
                                                URL = element.firstChild.nodeValue;
                                        }
                                        element = element.nextSibling;
                                }
                                content += "<a href='"+URL+"'>"+lead+"</a><br>"+body+"<br><br>";
                                createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);                       
                                var _txt:TextField = this["dynamic"+counter+"_txt"];
                                _txt.html = true;
                                _txt.border = true;
                                _txt.autoSize = true;
                                _txt.htmlText=content;
                                counter+=1;
                                }
                        story = story.nextSibling;
                }
        }
}

Не дает вообще никакого результата при запуске мувика (

Wolsh 03.08.2008 18:16

Код:

var counter:Number = 0;
ПЕРЕД while а не внутри
Код:

counter+=1;
в конце while, т.е. перед
Код:

story = story.nextSibling;
Счетчи считает стори, а у Вас - почемуто считает ноды внутри стори)))

jakim_denis 03.08.2008 18:22

Перепутад wile =)))
Поправил, но толку было 0 (((
Код:

Stage.align = "LT";
Stage.scaleMode = "noScale";
embedFonts = true;

headlineXML = new XML();

headlineXML.onLoad = myLoad;
headlineXML.load("headlines.xml");

function myLoad(ok) {
        if (ok == true) {
                Publish(this.firstChild);
        }
}

function Publish(HeadlineXMLNode) {
        if (HeadlineXMLNode.nodeName.toUpperCase() == "BROADCAST") {
                content = "";
                story = HeadlineXMLNode.firstChild;
                var counter:Number = 0;
                while (story != null) {
                        if (story.nodeName.toUpperCase() == "STORY") {
                                lead = "";
                                body = "";
                                URL = "";
                                element = story.firstChild;
                                while (element != null) {
                                       
                                        if (element.nodeName.toUpperCase() == "LEAD") {
                                                lead = element.firstChild.nodeValue;
                                        }
                                        if (element.nodeName.toUpperCase() == "BODY") {
                                                body = element.firstChild.nodeValue;
                                        }
                                        if (element.nodeName.toUpperCase() == "URL") {
                                                URL = element.firstChild.nodeValue;
                                        }
                                        element = element.nextSibling;
                                }
                                content += "<a href='"+URL+"'>"+lead+"</a><br>"+body+"<br><br>";
                                createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);                       
                                var _txt:TextField = this["dynamic"+counter+"_txt"];
                                _txt.html = true;
                                _txt.border = true;
                                _txt.autoSize = true;
                                _txt.htmlText=content;
                                }
                        counter+=1;
                        story = story.nextSibling;
                }
        }
}

В ответ лишь белый скрин и пустое окно ошибок (


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

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