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 >