[ Pobierz całość w formacie PDF ]
Nazwa zdarzenia Klasa zdarzenia
close flash.events.Event
connect flash.events.Event
data flash.events.DataEvent
ioError flash.events.IOErrorEvent
securityError flash.events.SecurityErrorEvent
Pełny kod MXML tej aplikacji przedstawia listing 13.17.
Listing 13.17. Pełny kod MXML
initialize="init()">
import mx.formatters.DateFormatter;
import mx.collections.ArrayCollection;
private var serviceURL:String =
"http://localhost:8080/ch13-flex/books";
[Bindable]
private var gridData:ArrayCollection = new ArrayCollection();
Flash | 401
private var pubdateFormatter:DateFormatter = new DateFormatter();
private var xmlsocket:XMLSocket = new XMLSocket();
function init() : void {
pubdateFormatter.formatString = "MMMM YYYY";
xmlsocket.addEventListener("connect", onXMLConnect);
xmlsocket.addEventListener("data", onXMLData);
xmlsocket.connect("localhost", 8900);
}
function onXMLConnect(event:Event) : void {
serverTime.text = "Połączono z serwerem.";
}
function onXMLData(event:DataEvent) : void {
var data:XML = XML(event.data);
serverTime.text = data.date + " " + data.time;
}
function loadBooks() : void {
// Wyczyszczenie danych z siatki.
gridData.removeAll();
// Aadowanie danych.
var loader:URLLoader = new URLLoader();
loader.addEventListener("complete", getCompleteListener);
loader.load(new URLRequest(serviceURL));
}
// Funkcja ta zostanie wywołana po załadowaniu URL danych.
function getCompleteListener(event:Event) : void {
// Rzutowanie celu zdarzenia na obiekt URLLoader.
var loader:URLLoader = URLLoader(event.target);
parseBookDoc(new XML(loader.data));
}
function parseBookDoc(docXML:XML) : void {
gridData.removeAll();
for (var i:String in docXML.book) {
gridData.addItem(docXML.book[i]);
}
}
function validateAddForm() : void {
add.enabled = ((title.text.length > 0) &&
(author.text.length > 0));
}
function addBook() : void {
disableForm();
var newBookXML:XML =
newBookXML.title = title.text;
newBookXML.author = author.text;
var pickedDate:Date = pubdate.selectedDate;
if (pickedDate == null)
pickedDate = new Date();
newBookXML.pubdate = pubdateFormatter.format(pickedDate);
var request:URLRequest = new URLRequest(serviceURL);
request.method="POST";
request.contentType="text/xml";
402 | Rozdział 13. Prezentacyjny XML
request.data = newBookXML.toXMLString();
var loader:URLLoader = new URLLoader();
loader.addEventListener("complete", postCompleteListener);
loader.load(request);
}
function postCompleteListener(event:Event) : void {
var loader:URLLoader = URLLoader(event.target);
parseBookDoc(new XML(loader.data));
reenableForm();
}
function disableForm() : void {
title.enabled = false;
author.enabled = false;
pubdate.enabled = false;
add.enabled = false;
load.enabled = false;
}
function reenableForm() : void {
load.enabled = true;
title.enabled = true;
author.enabled = true;
pubdate.enabled = true;
title.text = "";
author.text = "";
}
]]>
click="loadBooks()"/>
dataProvider="{gridData}">
change="validateAddForm()"/>
change="validateAddForm()"/>
click="addBook()"/>
textAlign="left" id="serverTime"/>
Flash | 403
Dostęp z różnych domen
Domyślnie w programie Flash Player są dość ścisłe reguły definiujące, jakiego rodzaju dostęp
do sieci jest dozwolony. Aplikacja Flash może tylko wysyłać żądania do hosta o dokladnie
takiej samej nazwie jak ten, z którego została załadowana. Jeśli film we Flashu zostanie
załadowany ze strony http://www.przyklad.com/flash/movie.swf to może wysyłać żądania do
http://www.example.com/feed ale nie do http://www.innastrona.com/feed, ani nawet http://data.
przyklad.com/feed. Aby otworzyć dostęp do innych hostów trzeba utworzyć plik cross domain
policy. Gdyby zródło danych znajdowało się pod adresem http://www.innastrona.com i chcieli-
byśmy dać dostęp do filmów Flash załadowanych z www.example.com, to plik ten powinien
być dostępny do pobrania pod adresem http://www.innastrona.com/crossdomain.xml:
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
Można stosować wiele elementów allow-access-from-domain. Ponadto można dzięki użyciu
wyrażeń wieloznacznych dać dostęp do filmów Flash ładowanych z dowolnej poddomeny
przyklad.com:
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
Używając wyrażeń wieloznacznych, można zezwolić na dostęp do filmów Flash z dowolnej
domeny:
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
Więcej na temat plików cross-domain policy można znalezć na stronie http://www.adobe.com/
cfusion/knowledgebase/index.cfm?id=tn_14213.
Na temat technologii omówionych w tym rozdziale można napisać znacznie więcej. Mam
nadzieję, że to, co przedstawiłem, dało ogólne wyobrażenie na temat miejsca XML w warstwie
prezentacyjnej aplikacji sieciowych oraz że podane przeze mnie zródła okażą się przydatne
w poszukiwaniu dodatkowych informacji na poruszone tematy.
404 | Rozdział 13. Prezentacyjny XML
[ Pobierz całość w formacie PDF ]