Example: Flex Recipe App MXML
Last updated on
30 April 2025
You are browsing documentation for an older version of Drupal, which is not supported any longer, and the information may not be correct. See current documentation for Contributed modules
This file shows you how you can connect to a Drupal service to get a list of recipes. It assumes a few things:
First that you have Drupal and all of the required modules and libraries installed:
- Drupal 5 - http://drupal.org/download
- Services - http://drupal.org/project/services
- AMFPHP - http://drupal.org/project/amfphp
- AMFPHP 1.9 Beta 2 - http://www.5etdemi.com/blog/archives/2007/01/amfphp-19-beta-2-ridiculous...
- Views - http://drupal.org/project/views
Drupal is setup in this way:
- Clean urls are enabled
- AMFPHP 1.9 Beta is extracted and placed inside of the AMFPHP module, in a folder called "amfphp" (modules/amfphp/amfphp)
- There is a content type called recipes, this needs to be created
- There is a view called "recipes_all" which shows a list of recipes.
With the following modules enabled:
- Services
- AMFPHP
- Views Service
- Node Service
- Views and Views UI
Services is setup with:
- API keys off
- Session IDs off
And your Flex project is setup:
- as a basic project
- with an the additional compiler argument: -services "services-config.xml"
- and a file called "services-config.xml" in your project root, copied from amfphp.org and with the endpoint uri changed to "/services/amfphp"
Other mentions
- You must be logged in as the administrator in the same browser you are testing Flex in to be able to save and add new posts
Here's the MXML:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
import mx.controls.*;
import mx.rpc.events.*;
import mx.utils.ArrayUtil;
[Bindable]
public var recipes:Array;
public function init():void
{
getRecipes();
}
public function onFault(event:FaultEvent):void
{
Alert.show(event.fault.faultString, "Error");
}
public function onViewsResult(event:ResultEvent):void
{
recipes = ArrayUtil.toArray(event.result);
}
public function getRecipes():void
{
views.getView("recipes_all", ['nid','title','body','changed']);
}
public function saveRecipe():void
{
var edit:Object;
if (recipes_select.selectedItem) {
edit = recipes_select.selectedItem;
}
else {
edit = new Object;
}
edit.type = "recipe";
edit.title = dish.text;
edit.body = recipe.text;
if (edit.title == "" || edit.body == "") {
Alert.show("Enter some content", "Error");
}
node.save(edit);
getRecipes();
}
public function onSaved(event:ResultEvent):void
{
Alert.show("Recipe was saved", "Saved");
}
public function newRecipe():void
{
recipes_select.selectedItem = undefined;
dish.text = "";
recipe.text = "";
}
</mx:Script>
<mx:RemoteObject showBusyCursor="true" destination="amfphp" source="views" id="views">
<mx:method name="getView" result="onViewsResult(event)" fault="onFault(event)" />
</mx:RemoteObject>
<mx:RemoteObject showBusyCursor="true" destination="amfphp" source="node" id="node">
<mx:method name="save" result="onSaved(event)" fault="onFault(event)" />
</mx:RemoteObject>
<mx:Panel width="500" height="400" layout="absolute" title="Recipes" horizontalCenter="0" verticalCenter="0">
<mx:DataGrid x="10" y="10" width="460" id="recipes_select" dataProvider="{recipes}" >
<mx:columns>
<mx:DataGridColumn headerText="NID" dataField="nid" width="40"/>
<mx:DataGridColumn headerText="Dish" dataField="title"/>
</mx:columns>
</mx:DataGrid>
<mx:Label x="10" y="160" text="Dish"/>
<mx:TextInput x="10" y="186" width="460" id="dish" text="{recipes_select.selectedItem.title}"/>
<mx:Label x="10" y="216" text="Recipe"/>
<mx:TextArea x="10" y="242" width="460" height="75" id="recipe" text="{recipes_select.selectedItem.body}"/>
<mx:Button x="416" y="328" label="Save" click="saveRecipe()"/>
<mx:Button x="420" y="158" label="New" click="newRecipe()"/>
</mx:Panel>
</mx:Application>
Help improve this page
Page status: Not set
You can:
You can:
- Log in, click Edit, and edit this page
- Log in, click Discuss, update the Page status value, and suggest an improvement
- Log in and create a Documentation issue with your suggestion