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




__,_._,___

Reply via email to