box-o-sand/flex-practice/03d2-item-renderers/WeatherDisplay.mxml

89 lines
2.8 KiB
Plaintext
Raw Normal View History

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
backgroundColor="#FFFFFF"
backgroundAlpha="0"
horizontalAlign="left"
verticalGap="15" horizontalGap="15">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
[Bindable]
private var myResult:XML;
[Bindable]
private var weatherObject:Object;
[Bindable]
private var listContents:ArrayCollection;
private namespace yweather = "http://xml.weather.yahoo.com/ns/rss/1.0";
use namespace yweather;
public function requestWeather():void {
weatherService.cancel();
var params:Object = new Object();
params.p = zip.text;
weatherService.send(params);
}
public function resultHandler(event:ResultEvent):void {
myResult = XML(event.result);
weatherObject = new Object();
weatherObject.zip = zip.text;
weatherObject.city = myResult.channel.yweather::location.@city;
weatherObject.temp = myResult.channel.item.yweather::condition.@temp;
weatherObject.imgsource = parseImageUrl(myResult.channel.item.description);
var a:Array = new Array(weatherObject);
listContents = new ArrayCollection(a);
}
private function parseImageUrl(fromHtml:XMLList):String {
var pattern:RegExp = /img src="(.+?)"/;
var results:Array = pattern.exec(fromHtml);
var imageURL:String = results[1]; // backreference 1 from pattern
return imageURL;
}
]]>
</mx:Script>
<mx:HTTPService
id="weatherService"
url="http://weather.yahooapis.com/forecastrss"
resultFormat="e4x"
result="resultHandler(event)" />
<mx:Text text="1. Basic Form + HTTPService Retrieval" />
<mx:Form width="400">
<mx:FormItem label="Zip Code">
<mx:TextInput id="zip" />
<mx:Button label="Get Weather"
click="requestWeather()" />
</mx:FormItem>
</mx:Form>
<mx:Text text="Raw RSS Feed" />
<mx:TextArea id="resultFld"
text="{myResult}"
width="400" height="152" />
<mx:Text text="1. List w/ Image Item Renderer (Drop-In)" />
<mx:List dataProvider="{listContents}"
labelField="imgsource"
width="400" height="100"
itemRenderer="mx.controls.Image" />
<mx:Text text="2. List w/ HBoxWeatherDisplay itemRenderer" />
<mx:List dataProvider="{listContents}"
labelField="zip"
width="400" height="100"
itemRenderer="HBoxWeatherDisplay" />
</mx:Application>