|
|
YOUR FEEDBACK
Did you read today's front page stories & breaking news?
SYS-CON.TV SYS-CON.TV WEBCASTS |
TOP COLDFUSION LINKS CF & Flash
Completing The Real Estate Sample Application
Managing property listings through Flash Forms PART 2
Mar. 14, 2006 05:00 PM
Digg This!
Page 1 of 4
next page »
In Part 1 of this tutorial (CFDJ, Vol.7, issue 12), you built a search interface for the Real Estate sample application. In Part 2, you'll learn how to populate a form by binding the fields to a datagrid, and then edit, add, and remove records from the database. You will add functionality to the one-screen interface you started to build in Part 1 using ColdFusion and Flash Remoting.
ColdFusion MX 7.01
Prerequisite Knowledge
In this tutorial, you'll populate the Add/Edit panel with the record details for the user's search so that the user can edit, remove, and add new records from the same panel (see Figure 1). Code the following functionality:
The bottom-right panel contains a form with an input for every attribute of a property listing: address, price, number of bedrooms, bathrooms, amenities, and so forth. Most of the fields are text input fields, but there are also controls for selects, radio buttons, check boxes, a text area, and a date field. When a user opens the application (you can try it by going to http://localhost:8500/realestate/index.cfm), he or she selects search criteria and the application returns the search results. The user clicks one of the records in the datagrid and expects the detail panel in the bottom-right corner to display the details of the selected record. Where will the necessary information come from? In Part 1 of this tutorial, the search returned query results that contained all of the columns in the "listing" table in the database. However, only a few of those columns - namely Price, Type, Bedrooms, Bathrooms, and Footage - appeared in the datagrid. "What a waste of bandwidth!" you may have thought. Not really so, because you will need the additional columns to populate the entire form. Populate each field from a column of the query returned by the search. The query that populates the datagrid is "stored" in the datagrid. To get the data corresponding to the selected row in the grid, access the cfgrid by its name (listingGrid) and its special property (selectedItem); the name and property specify the row the user selected. Then, with dot notation, select the specific column you need, which is different for each input. The complete path is this: listingGrid.selectedItem.columnName. Use this path for all of the columns of the query, even if they were not defined as datagrid columns with the cfgridcolumn tag.
Binding Each Field Type
<cfformgroup type="panel" label="Add / Edit Properties"> Within this panel, you will add, one by one, all the fields corresponding to each property listing attribute, such as address, number of bedrooms, and so forth. Each field has a different length or type, so you will use different controls or variations of the same controls as user inputs. There are some differences in the way you populate each control. Populating text input controls (<cfinput type="text">), textarea controls (<cftextarea>) and datefield controls (<cfinput type="datefield">) is straightforward if you simply use their bind property: bind="{listingGrid.selectedItem.columnName}" Checkbox values can be true or false. The column that populates the checkbox control must be a Boolean type so that you can write: value="{listingGrid.selectedItem.columnName}" Select and radio button controls are a different challenge. Neither of them have a bind or similar attribute that you can use to bind them directly. Instead, you must make the controls acquire the right choice when the selected record in the datagrid changes. In ActionScript, controls fire events when certain things happen. For example, the datagrid fires an onChange event each time the user selects an item. You can make your cfgrid call a function or run a piece of ActionScript code every time that event fires. To tell the datagrid what to do in that event, use the onChange attribute: <cfgrid name="listingGrid" onchange="listingGridChanged()"> You can call any function you want, either a built-in function such as alert('Datagrid selection changed!') or a custom function. If you choose to call a custom function, such as listingGridChanged(), you must declare it in a <cfformitem type="script"> block:
<cfformitem type="script"> To avoid repeating the same code for every select control, create a helper function to select a specific item in the select control. This function looks for the option value that matches the desired item and then selects it:
public function selectOption(select: mx.controls.ComboBox, optionToSelect:String):Void { Page 1 of 4 next page » CFDJ LATEST STORIES . . .
SUBSCRIBE TO THE WORLD'S MOST POWERFUL NEWSLETTERS SUBSCRIBE TO OUR RSS FEEDS & GET YOUR SYS-CON NEWS LIVE!
|
SYS-CON FEATURED WHITEPAPERS MOST READ THIS WEEK |
|||||||||||||||||||||||||||||||||||||||||||||||||||||