MXNAAppController.as
source link: http://www.mikechambers.com/blog/2004/01/27/mxnaappcontrolleras/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
MXNAAppController.as
Tuesday, January 27, 2004
I am going to post the class files for the MXNA WebService App I put together over the weekend. I will post them as I add the comments.
I will eventually post all of the source, but I want to work out all of the kinks first.
The first class I am posting, MXNAAppController is the controller for the application. It handles all communication with the web services on the server, and contains a single view class, that contains most of the UI elements for the app.
So, if you find any bugs, or have any suggestions, post them in the comments.
import mx.containers.Window;
import com.macromedia.mxna.MXNAWebService;
import com.macromedia.mxna.app.MXNAFeedView;
import mx.controls.Alert;
import mx.controls.ProgressBar;
/* Associated with the main app controller clip */
class com.macromedia.mxna.app.MXNAAppController extends MovieClip
{
/*Window Component for Background*/
private var bgWindow:Window;
/*MXNA WebService Class to Load Data*/
private var ws:MXNAWebService;
/*Main App View*/
private var feedView:MXNAFeedView;
/*clip to block window component interaction*/
private var blocker:MovieClip;
/*Progress Bar Component*/
private var pBar:ProgressBar;
/*Used to cache category data*/
private var feedCache:Object;
private var so:SharedObject;
/*
Constructor. We do everything in onLoad to be sure
everything has initialized
*/
public function MXNAAppController()
{
}
/*
Called by Flash when the clip is laoded on stage. We do a bunch of
initialization here.
*/
private function onLoad():Void
{
feedCache = new Object();
//set the clip to catch mouse events to the Window Component title bar.
//we jsut want to use it for the background
blocker._alpha = 0;
blocker.onRelease = function(){};
blocker.useHandCursor = false;
bgWindow.title = "MXNA WebService Example";
//braodcast when the user selects a category
feedView.addEventListener("onSelectCategory", this);
//Custom class that provides an interface / API to the MXNA webservices
ws = new MXNAWebService();
//event when categories load from server
ws.addEventListener("onGetCategories", this);
//event when posts load from server
ws.addEventListener("onGetPostsByCategory", this);
//event when an error occurs
ws.addEventListener("onFault", this);
//see if categories have been laoded before. If so, use them.
so = SharedObject.getLocal("MXNAWebServiceExample");
var categories = so.data.categories;
if(categories != undefined)
{
setCategories(categories);
}
else
{
enableProgress(true, "Loading Categories...");
//if categories not saved from before, then load them from the server.
ws.getCategories();
}
}
public function onActivate(Void):Void
{
}
//utility methods that takes an array of categories and sets them in the UI
//passing them to the feedView
private function setCategories(categories:Array):Void
{
feedView.setCategories(categories, "CATEGORY");
//when the categories are loaded, lets go get the first batch of posts
//so the user has something to look at.
getPostsByCategory("All");
}
//takes a category, and gets the posts for that category from the server
private function getPostsByCategory(category:String):Void
{
enableProgress(true, "Loading " + category + " Feeds...");
ws.getPostsByCategory(category);
}
//method to manage the progress bar.
//We are usign it in indetermindate mode, so, we need to turn it off when
//it is not being used (i.e. make it invisible).
private function enableProgress(enabled:Boolean, label:String):Void
{
if(label == undefined)
{
label = "";
}
pBar.indeterminate = enabled;
pBar.label = label;
pBar.enabled = enabled;
pBar._visible = enabled;
//if something is being loaded, we need to disable the UI in order to
//keep things in sync
feedView.enabled = !enabled;
}
//event listener method, called when categories are loaded from the server.
private function onGetCategories(eventObj:Object):Void
{
enableProgress(false);
//contains an array of string category names
var results:Array = eventObj.categories;
//we need to add the "All" option since this is not returned from
//the server
results.unshift({CATEGORY:"All"});
//lets save the categories in an SO, so we don't have to load them next
//time
so.data.categories = results;
so.flush();
setCategories(results);
}
//event listener method, called when the user selects a category from the UI.
private function onSelectCategory(eventObj:Object):Void
{
//category name
var category:String = eventObj.category;
//lets see if the feeds are in the cache
if(feedCache[category] != undefined)
{
//if so, use it
feedView.dataProvider = feedCache[category];
return;
}
//otherwise, go to the server to get the feeds for the category
getPostsByCategory(category);
}
//event listener method, called when posts are loade from the server
private function onGetPostsByCategory(eventObj:Object):Void
{
enableProgress(false);
//add them to the cache.
feedCache[eventObj.category] = eventObj.feeds;
//send them to the feedView to be displayed
feedView.dataProvider = eventObj.feeds;
}
//called if an error occurs. only broadcast by MXNA class right now.
private function onFault(faultObj:Object):Void
{
var info:Object = faultObj.fault;
//show an Alert box with some info
Alert.show(info.detail,
info.faultstring,
Alert.OK,
this,
null,
"errorIcon",
Alert.OK);
feedView.enabled = false;
enableProgress(false);
}
}
Btw, big ups to Sean Voisen for the AS 2 support in his MovableType CodeBeautifier.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK