Я собираюсь продемонстрировать, как использовать компонент datagrid с xml-файлом. Когда вам нужно отобразить табличные данные, нет более быстрого и простого способа, чем использовать сетку данных, и в сочетании с файлом XML это делает все лучше.
Шаг 1. Настройка Flash-документа
Создайте новый флэш-файл (Actionscript 3.0). Установите документ на 600x400px с белым фоном.
Сохраните этот файл с именем xmlDatagrid.fla
Шаг 2. Добавление компонентов в документ
Откройте окно компонентов, перейдя в Меню> Окно> Компоненты или нажав Ctrl + F7.
Перетащите кнопку, комбинированный список и компонент сетки данных на сцену.
Затем удалите кнопку, комбобокс и компоненты сетки данных со сцены; теперь они в вашей библиотеке.
Вот предварительный просмотр структуры документа xml, которую мы будем использовать:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
<?xml version=»1.0″?>
<books>
<book>
<title>Learning ActionScript 3.0: A Beginner’s Guide</title>
<instock>yes</instock>
<price>26.39</price>
</book>
<book>
<title>Essential ActionScript 3.0</title>
<instock>yes</instock>
<price>34.64</price>
</book>
</books>
|
Загрузка исходного кода содержит три файла XML: flash.xml
, ajax.xml
и php.xml
; каждый из них имеет ту же структуру, что и фрагмент выше, но содержит разные книги. Вам нужно будет поместить их в ту же папку, что и ваш FLA.
Шаг 3: Откройте новый файл ActionScript
Откройте новый файл ActionScript и сохраните его с именем XMLDataGrid.as.
Теперь откройте объявление пакета и импортируйте классы, которые мы будем использовать:
1
2
3
4
5
6
7
8
9
|
package {
import flash.display.MovieClip;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.MouseEvent;
import flash.events.Event;
import fl.controls.DataGrid;
import fl.controls.ComboBox;
import fl.controls.Button;
|
Шаг 4. Расширение класса MovieClip и объявление переменных
Основной класс документа должен расширять либо класс Sprite, либо класс MovieClip; здесь мы расширяем класс MovieClip. Объявите переменные, которые мы будем использовать:
1
2
3
4
5
6
7
|
package {
public class XMLDataGrid extends MovieClip {
var dg:DataGrid;
var cb:ComboBox;
var urlLoader:URLLoader = new URLLoader();
var loadButton:Button;
var bookXML:XML;
|
Шаг 5: Настройте конструктор
Здесь мы установили конструктор с тремя функциями, которые мы будем использовать:
1
2
3
4
5
|
public function XMLDataGrid():void {
setupGrid();
setupComboBox();
setupButton();
}
|
Шаг 6: Определения функций
Здесь мы определяем функции, которые мы используем в конструкторе:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
private function setupGrid():void {
dg=new DataGrid();
dg.addColumn(«Title»);
dg.addColumn(«InStock»);
dg.addColumn(«Price»);
//This sets the size of the datagrid
dg.setSize(600,100);
//This is how many rows you want the datagrid to show
dg.rowCount=5;
//When we add colums they are put into an array
//Here we set the first column «Title» width to 450
dg.columns[0].width=450;
//This set the x and y position of the datagrid
dg.move(0,100);
addChild(dg);
}
private function setupComboBox():void {
cb = new ComboBox();
//This adds item to the comboBox
cb.addItem({label: «Flash» });
cb.addItem({label: «Ajax» });
cb.addItem({label: «Php» });
//This sets the x and y positions
cb.move(200,50);
addChild(cb);
}
private function setupButton():void {
loadButton = new Button();
loadButton.label = «Load Books»;
loadButton.addEventListener(MouseEvent.CLICK, loadBooks);
loadButton.x = 200;
loadButton.y = 325;
addChild(loadButton);
}
|
Функция setupGrid()
создает компонент DataGrid
, который будет отображать данные из файла XML, который мы передаем ему.
Функция setupComboBox()
создает ComboBox
, который представляет собой раскрывающийся список, который мы будем использовать, чтобы позволить пользователю выбрать файл XML для передачи в сетку данных.
Кнопка, созданная в setupButton()
будет использоваться для передачи файла XML, выбранного в поле со списком, в сетку данных. Мы напишем этот код дальше.
Шаг 7: Определите функцию loadBooks
Функция loadBooks используется в eventListener loadButton.
1
2
3
4
5
6
|
private function loadBooks(e:Event):void {
//Here the cb.selectedLabel returns a string so we call toLowerCase() on it
//and append .xml to it ie if ‘Flash’ is selected we load ‘flash.xml’
urlLoader.load(new URLRequest(cb.selectedLabel.toLowerCase()+».xml»));
urlLoader.addEventListener(Event.COMPLETE, populateGrid);
}
|
Шаг 8: Определите функцию populateGrid
Функция populateGrid используется в eventListener urlLoader в функции loadBooks.
01
02
03
04
05
06
07
08
09
10
11
12
13
|
private function populateGrid(e:Event):void {
var booksXML:XML = new XML( e.target.data);
//How many items are in the xml file
var booksLength:int = booksXML.book.length();
//This removes all the previously added data in the datagrid.
dg.removeAll();
//Here we loop through the <book> nodes in the xml file, and add each as a row to the datagrid
for (var i:int =0; i < booksLength; i++) {
dg.addItem({Title: booksXML.book[i].title, InStock: booksXML.book[i].instock,Price: booksXML.book[i].price});
}
} //Close out the class
} // This is closing the package out
|
Шаг 9: Установите класс документа и тест
Установите класс документа в «XMLDataGrid» и протестируйте фильм!
Вывод
Здесь мы узнали, что отображение табуларных данных во флэш-памяти упрощается с помощью компонента datagrid, и что их сопряжение с xml является отличным решением.
Это мой первый урок, надеюсь, вы узнали что-то полезное и спасибо за чтение!