Can't see any good reason to subclass a control in order to hardcode the 
dataProvider.  The idea is to keep the components loosely coupled.  Are you 
having a problem with dataProvider="{model.facilities}"?

-TH

--- In flexcoders@yahoogroups.com, Alex Harui <aharui@...> wrote:
>
> Binding a visual component to a singleton limits its reuse.  So there may not 
> really a best practice.  The minimum code way is probably to assign the 
> dataProvider in commitProperties instead of the constructor.  The 
> model.facilities might have its final assignment by then.
> 
> 
> On 8/25/11 9:41 AM, "hanzo55" <shawn.a.holmes@...> wrote:
> 
> 
> 
> 
> 
> 
> I am working with a project already in place. It uses Cairngorm and is built 
> on Flex 3.0.2.2113
> 
> A standard ComboBox is implemented in one of the views like so:
> 
> <mx:ComboBox dataProvider="{model.facilities}" id="Facility">
> 
> "model" is a bindable singleton, and one of its properties, "facilities" is a 
> public ArrayCollection. On initialization, a function runs in the singleton 
> to populate facilities; it does this by pointing model.facilities to another 
> ArrayCollection that has been previously populated, such as:
> 
> model.facilities = model.assigned_facilities;
> 
> This works without issue; when the application starts, the ComboBox is 
> properly populated with the values pointed to by model.facilities.
> 
> I have decided! to come in and build a subclass of ComboBox in ActionScript, 
> and rather than pass the dataProvider in, I want to include the singleton 
> within the ActionScript, and simply do the same assignment in the 
> constructor. The resulting MXML would look like this:
> 
> <components:FacilityComboBox id="Facility"  />
> 
> and the constructor would look like this:
> 
> public function FacilityComboBox()
> {
> super();
> ! BindingUtils.bindProperty(this, "dataProvider", model, "facilities");
> }
> 
> My question is: Is this the best practice when subclassing a UIComponent and 
> wanting to handle the dataProvider assignment internally? The reason I ask 
> is, I had originally built the constructor like this:
> 
> public function FacilityComboBox()
> {
> super();
> thi! s.dataProperty = model.facilities;
> }
> 
> which worked for other subclassed ComboBoxes where the dataProvider *did not 
> change after initialization*. However, because of how model.facilities is 
> assigned (to an existing ArrayCollection), no change was ever detected, and 
> upon launch the application, the ComboBox sat dormant and never received any 
> values to populate. Changing to the BindingUtils method solved this problem, 
> but I now fear I'm missing a much broader concept about dataProvider 
> assignment in pure ActionScript classes. Is my BindingUtils methodology the 
> one to go with? Or should I be considering something drastically different?
> 
> 
> 
> 
> 
> --
> Alex Harui
> Flex SDK Team
> Adobe System, Inc.
> http://blogs.adobe.com/aharui
>


Reply via email to