Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как подружить Datagrid и внешний XML в AS3 (http://www.flasher.ru/forum/showthread.php?t=95348)

zluk 04.05.2007 11:18

Как подружить Datagrid и внешний XML в AS3?
 
делал как в хелпе:

1. Create a new Flash file (ActionScript 3.0) document.
2. In the Components panel, double-click the DataGrid component to add it to the Stage.
3. In the Property inspector, enter the instance name aDg.
4. Open the Actions panel, select Frame 1 in the main Timeline, and enter the following ActionScript code:
Код:

import fl.controls.dataGridClasses.DataGridColumn;
import fl.data.DataProvider;

var teamXML:XML = <team>
        <player name="Player A" avg="0.293" />
        <player name="Player B" avg="0.214" />
        <player name="Player C" avg="0.317" />
</team>;

var nameCol:DataGridColumn = new DataGridColumn("name");
nameCol.headerText = "Name";
nameCol.width = 120;
var avgCol:DataGridColumn = new DataGridColumn("avg");
avgCol.headerText = "Average";
avgCol.width = 60;

var myDP:DataProvider = new DataProvider(teamXML);

aDg.columns = [nameCol, avgCol];
aDg.width = 200;
aDg.dataProvider = myDP;
aDg.rowCount = aDg.length;

Все работает.

а когда пробую подключить внешний XML перестает робить:
Код:

var loader:URLLoader;
// ...
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, xmlLoaded);

var request:URLRequest = new URLRequest("xmldata.xml");
loader.load(request);
//...
function xmlLoaded(event:Event):void {
    var myXML:XML = new XML(loader.data);
    //...
}

import fl.controls.dataGridClasses.DataGridColumn;
import fl.data.DataProvider;


var nameCol:DataGridColumn = new DataGridColumn("name");
nameCol.headerText = "Name";
nameCol.width = 120;
var avgCol:DataGridColumn = new DataGridColumn("avg");
avgCol.headerText = "Average";
avgCol.width = 60;

var myDP:DataProvider = new DataProvider(myXML);

aDg.columns = [nameCol, avgCol];
aDg.width = 200;
aDg.dataProvider = myDP;
aDg.rowCount = aDg.length;

пробовал разными способами, никак не получается...
подскажите плиз
собственно Adobe Flash CS3, ActionScript 3.0

motor4ik 04.05.2007 11:49

у вас выполняется
Код:

var myDP:DataProvider = new DataProvider(myXML);
раньше чем
Код:

var myXML:XML = new XML(loader.data);
делайте выводы

zluk 04.05.2007 11:50

спасибо, пошел думать

zluk 04.05.2007 12:01

вроде поправил, вылезли другие ошибки...

motor4ik 04.05.2007 12:15

ну так это же хорошо ) знаете в чем проблема, хуже когда они не вылазят и не знаешь в чем проблема

zluk 04.05.2007 12:21

пошел эксперементировать

zluk 04.05.2007 12:37

никак...
 
Сделал так:

Код:

import fl.controls.dataGridClasses.DataGridColumn;
import fl.data.DataProvider;


var myXML:XML;
var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("xmldata.xml");
loader.load(request);
loader.addEventListener(Event.COMPLETE, onComplete);

function onComplete(event:Event):void
{
    var loader:URLLoader = event.target as URLLoader;
    if (loader != null)
    {
        myXML = new XML(loader.data);
        trace(myXML.toXMLString());
               
               
    }
    else
    {
        trace("loader is not a URLLoader!");
    }
}


var nameCol:DataGridColumn = new DataGridColumn("name");
nameCol.headerText = "Name";
nameCol.width = 120;
var avgCol:DataGridColumn = new DataGridColumn("avg");
avgCol.headerText = "Average";
avgCol.width = 60;

var myDP:DataProvider = new DataProvider(myXML);

aDg.columns = [nameCol, avgCol];
aDg.width = 200;
aDg.dataProvider = myDP;
aDg.rowCount = aDg.length;


пишет ошибку:
Код:

TypeError: Error #1088: The markup in the document following the root element must be well-formed.
        at test2_fla::MainTimeline/onComplete()
        at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at flash.net::URLLoader/flash.net:URLLoader::onComplete()

XML:
Код:

<?xml version="1.0"?>
<team>
        <player name="Player A" avg="0.293" />
        <player name="Player B" avg="0.214" />
        <player name="Player C" avg="0.317" />
</team>


motor4ik 04.05.2007 12:50

попробуйте сначала слушателя добавить а потом load сделать

zluk 04.05.2007 12:51

что такое слушатель?

motor4ik 04.05.2007 13:00

EventListener, но это я прогнал со сменой мест, не в этом дело


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

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