Hi Ralf,
Here is a paired-down version of one of my ViewHelpers. Sorry about the formatting, it didn't copy over well. The searchView has a search text field, a RadioButtonGroup to select the search type, and two DateFields that can be used alone or in conjunction with the search field (depending on the search type selected). Some of this can be accomplished with validators. But, as you can see, there are different combinations of search options that need to be validated against each other. The functions like clearSearchDates() and searchFocus() are the ones that really seem to not require the creation of a command. Any advise is welcome. Also, in a case like this, would it be better to create a variable model:ModelLocator = new ModelLocator.getInstance();. It seems that using getInstance() for each of the individual variable is redundant and maybe slower.
Thank you,
Tim Hoff
package org.ets.main.code.view.sideView.search
{
import flash.events.Event;
import mx.utils.StringUtil
import mx.controls.Alert;
import mx.events.CloseEvent;
import org.nevis.cairngorm.view.ViewHelper;
import org.nevis.cairngorm.control.CairngormEvent;
import org.ets.main.code.control.ApplicationController;
import org.ets.main.code.control.SearchEvent;
import org.ets.main.code.model.ModelLocator;
import org.ets.main.code.vo.SearchOptionsVO;
import org.ets.main.code.vo.SearchSummaryVO;
public class SearchViewHelper extends ViewHelper
{
public function SearchViewHelper()
{
super();
}
//----------------------------------------------------------------------------
public function validateSearchOptions():void
{
ModelLocator.getInstance().statusMessage = "";
view.txtSearch.errorString = "";
view.searchFromDate.errorString = "";
view.searchToDate.errorString = "";
// From and To Dates
if (ModelLocator.getInstance().alertStatus == false)
{
if (view.radiogroupSearchOptions.selection.value == ModelLocator.SEARCH_TYPE_DATE_RANGE)
{
if ((view.searchToDate.text == ModelLocator.SEARCH_TO_DATE_LABEL) || (view.searchToDate.text == ""))
{
ModelLocator.getInstance().statusMessage = ModelLocator.MESSAGE_SEARCH_DATES_REQUIRED;
view.searchFromDate.errorString = ModelLocator.MESSAGE_SEARCH_DATES_REQUIRED;
view.searchToDate.errorString = ModelLocator.MESSAGE_SEARCH_DATES_REQUIRED;
} else if ((view.searchFromDate.text == ModelLocator.SEARCH_FROM_DATE_LABEL) || (view.searchFromDate.text == ""))
{
ModelLocator.getInstance().statusMessage = ModelLocator.MESSAGE_SEARCH_FROM_DATE_REQUIRED;
view.searchFromDate.errorString = ModelLocator.MESSAGE_SEARCH_FROM_DATE_REQUIRED;
}
}
if ((view.searchToDate.text != ModelLocator.SEARCH_TO_DATE_LABEL) && (view.searchToDate.text != "") && (view.searchFromDate.text != "") && (view.searchFromDate.text != ModelLocator.SEARCH_FROM_DATE_LABEL))
{
if (view.searchToDate.selectedDate < view.searchFromDate.selectedDate)
{
ModelLocator.getInstance().statusMessage = ModelLocator.MESSAGE_SEARCH_FROM_DATE_LT_TO_DATE;
view.searchFromDate.errorString = ModelLocator.MESSAGE_SEARCH_FROM_DATE_LT_TO_DATE;
}
}
// txtSearch String
if (view.radiogroupSearchOptions.selection.value != ModelLocator.SEARCH_TYPE_DATE_RANGE)
{
var txtSearch : String = StringUtil.trim(view.txtSearch.text);
if (txtSearch == "")
{
view.txtSearch.text = "";
ModelLocator.getInstance().statusMessage = ModelLocator.MESSAGE_SEARCH_STRING_REQUIRED;
view.txtSearch.errorString = ModelLocator.getInstance().statusMessage
}
}
// Search or Display Error Message
if (ModelLocator.getInstance().statusMessage == "") {
search();
} else {
ModelLocator.getInstance().alertStatus == true
Alert.show(ModelLocator.getInstance().statusMessage,ModelLocator.getInstance().sideViewTitle, Alert.OK, null, alertListener, null, Alert.OK);
}
} // alertStatus == false
}
//----------------------------------------------------------------------------
public function search():void
{
var searchOptionsVO : SearchOptionsVO = new SearchOptionsVO();
var searchSummaryVO : SearchSummaryVO = new SearchSummaryVO();
var searchMessage : String;
searchMessage = view.radiogroupSearchOptions.selection.label;
if (view.radiogroupSearchOptions.selection.value == ModelLocator.SEARCH_TYPE_DATE_RANGE)
{
searchMessage += " ";
searchMessage += view.searchFromDate.text;
searchMessage += " to ";
searchMessage += view.searchToDate.text;
} else {
searchMessage += " = ";
searchMessage += view.txtSearch.text.toUpperCase();
if ((view.searchToDate.text != ModelLocator.SEARCH_TO_DATE_LABEL) && (view.searchToDate.text != ""))
{
searchMessage += " - ";
searchMessage += view.searchFromDate.text;
searchMessage += " to ";
searchMessage += view.searchToDate.text;
}
}
searchOptionsVO.searchMessage = searchMessage;
searchOptionsVO.searchType = view.radiogroupSearchOptions.selection.value.toString();
searchOptionsVO.searchString = view.txtSearch.text;
if (view.searchFromDate.text.toString() == ModelLocator.SEARCH_FROM_DATE_LABEL){
searchOptionsVO.useDates = 'No'
} else {
searchOptionsVO.useDates = 'Yes'
}
searchOptionsVO.searchFromDate = view.searchFromDate.text.toString();
searchOptionsVO.searchToDate = view.searchToDate.text.toString();
ModelLocator.getInstance().searchOptionsVO = searchOptionsVO;
var event : SearchEvent = new SearchEvent( searchOptionsVO );
view.dispatchEvent( event );
view.txtSearch.text = ""
view.txtSearch.errorString = "";
view.txtSearch.setFocus();
}
//----------------------------------------------------------------------------
public function clearSearchDates():void
{
view.searchFromDate.text = ModelLocator.SEARCH_FROM_DATE_LABEL;
view.searchToDate.text = ModelLocator.SEARCH_TO_DATE_LABEL;
view.txtSearch.setFocus();
}
//----------------------------------------------------------------------------
public function alertListener(eventObj:CloseEvent):void
{
if (eventObj.detail==Alert.OK) {
ModelLocator.getInstance().alertStatus = false;
if (view.txtSearch.errorString != "") {
view.txtSearch.setFocus();
}
}
}
//----------------------------------------------------------------------------
public function searchFocus():void
{
view.txtSearch.errorString = "";
view.txtSearch.setFocus();
}
//----------------------------------------------------------------------------
}
}
--- In [email protected], "Ralf Bokelberg" <[EMAIL PROTECTED]> wrote:
>
> Also, whenever you are able to isolate a cohesive set of properties
> and methods from your view, you can extract it into a separate class
> which represents something real (what a pity that flexbuilder isn't
> capable to do this automatically).
>
> Tim, can you provide a code example, which necessarily needs a
> ViewHelper (or can benefit from it substantially)?
>
>
> Cheers,
> Ralf.
>
> On 7/3/06, JesterXL [EMAIL PROTECTED] wrote:
> > Speaking for Steven, but the reason they espoused using ModelLocator over
> > ViewHelpers was a few reasons. First off, many people felt the need to
> > create ViewHelpers for every View. This was ridicolous; no View could ever
> > do anything useful but instantiate GUI components, and register for events.
> > You had no clue WHAT that View could do. Suddenly you're code base
> > basically doubled for extremely little gain.
>
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
YAHOO! GROUPS LINKS
- Visit your group "flexcoders" on the web.
- To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
- Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.

