Ok, after a little more thought.  Yes, you had me at encapsulation.  
But, "the View's shouldn't know about ModelLocator..", 

:: scratches head ::, but Views should be bound to the ModelLocator 
for state?

I can see the logic working for the small DataProvider question that 
started this thread.  If a sub-view is small enough this works fine 
and the view is easily shared with no reference to the 
ModelLocator.  However, if the sub-view includes multiple controls 
that have different DataProviders; like a DataGrid and several 
filter combo boxes, it starts to become redundant.  Add to that, the 
sub-view may also have states.  In the absence of callbacks, you 
would also have to pass along binding of the currentState variable 
in the sub-view's outer definition.  And what about sub-views that 
also have sub-views as components; more passed variables?

As the passed number of ModelLocator references grows inside the sub-
view, you could use the approach that I mentioned, 
model="{ModelLocator.getInstance()}".  But, this would require the 
sub-view to import the ModelLocator for definition of the model 
variable anyway.   At a point, it gets cumbersome passing the 
variables down the list instead of getting them directly.  No?

So, how to justify: "Views are bound to the ModelLocator for state 
(including data), but (for loose coupling) should hold no reference 
to the ModelLocator." 

I guess this depends on scale. If the sub-view is shared with 
several applications, the outer definition of ModelLocator variables 
would be necessary, since the different application's ModelLocators 
might have different namespaces.  However, if the sub-view is just 
shared with other views in the same application, the direct approach 
seems cleaner.  That is unless, you are creating different instances 
of the sub-view that require separate bound variables.

I don't think that there is an absolute here.  Both methods have 
merit in their own way.  Jesse, I know that you have a different 
approach altogether, than what is currently supported in Cairngorm.  
I'm just trying to get a feel for how other people are doing this in 
large-scale applications

Thanks again,
-TH

--- In [email protected], "Tim Hoff" <[EMAIL PROTECTED]> wrote:
>
> That makes sense.  Especially if the view has several bound 
> variables.  In that case, model="ModelLocator.getInstance()".  At 
> the very least, it would make the code more readable.  Thanks for 
> your point of view.
> 
> -TH
> 
> --- In [email protected], "JesterXL" <jesterxl@> wrote:
> >
> > I do it because if I don't, my boss yells at me.  Something 
about 
> > "encapsulation" and "View's shouldn't know about ModelLocator... 
> they are 
> > too tightly coupled that way."  This allows a master View to act 
> as an 
> > intermediary controller of sorts, and dictate what view knows 
> about what. 
> > Since our applications are friggin' huge, this allows us to 
easily 
> share 
> > View's throughout.  If we shoved ModelLocator in 'em, they 
> wouldn't be 
> > portable.
> > 
> > This worked great in Flex 1.5, so you really should not worry 
> about 
> > performance in Flex 2... they've optimized this stuff for us so 
> all the 
> > uber-OOP programmer guys don't shoot themselves in the foot 
> performance 
> > wise.
> > 
> > ----- Original Message ----- 
> > From: "Tim Hoff" <TimHoff@>
> > To: <[email protected]>
> > Sent: Monday, July 10, 2006 11:53 AM
> > Subject: [flexcoders] Re: Accessing a datagrid inside a 
different 
> viewstate
> > 
> > 
> > Hi Jesse,
> > 
> > I started using this approach because it was used in the samples.
> > When I sought to increase the performace of the application, I
> > noticed a little gain when I bound the source directly to the
> > DataProvider.  By creating an additional [Bindable] 
ArrayCollection
> > and an additonal reference in the outer description of the
> > component, it adds to the resources used and instructions.  Do 
you
> > think that it makes sense to use the direct binding approach 
> instead?
> > 
> > Tim
> > 
> > --- In [email protected], "JesterXL" <jesterxl@> wrote:
> > >
> > > If the View's, and all parents have a creationPolicy (in the 
case
> > of Containers) to "all", then it will be created.  However, you
> > cannot depend on creation order 100%; you'll end up with a race
> > condition somehwere, and pull you're hair out.  You're best 
> approach
> > is to utilize a ModelLocator approach where you're sub-view, the
> > datagrid, is bound to data inside the view.  This data is 
exposed 
> as
> > a public property that has the bindable tag (can be a 
> getter /setter
> > [mutator] also).  That way, as soon as the view is created, it 
has
> > the data it needs.
> > >
> > > -- pseduo code --
> > >
> > > // ModelLocator class
> > >
> > > [Bindable]
> > > public var my_array:ArrayCollection;
> > >
> > > // main view
> > >
> > > import ModelLocator;
> > >
> > > <view:MyView someData="{ModelLocator.getInstance
().my_array}" />
> > >
> > > // sub view
> > >
> > > public var someData:ArrayCollection;
> > >
> > > <mx:DataGrid dataProvider="{someData}" />
> > >
> > > Make sense?
> > >
> > >
> > > ----- Original Message ----- 
> > > From: Joe Stramel
> > > To: [email protected]
> > > Sent: Monday, July 10, 2006 10:59 AM
> > > Subject: [flexcoders] Accessing a datagrid inside a different
> > viewstate
> > >
> > >
> > > I have a custom component that I created and I have added it to
> > the main application.  There is a datagrid inside the custom
> > component.  I call the data in the main app, place it in a public
> > ArrayCollection and want the datagrid to display the data.  My
> > problem is that the datagrid is in a different viewstate other 
than
> > the default view and so I get a null reference error when I try 
to
> > populate the datagrid from the main app.  Is there a way to force
> > the component to create itself with the main app even though it 
is
> > in a different viewstate?  Thank you
> > >
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > --
> > 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
> >
>







------------------------ Yahoo! Groups Sponsor --------------------~--> 
Yahoo! Groups gets a make over. See the new email design.
http://us.click.yahoo.com/XISQkA/lOaOAA/yQLSAA/nhFolB/TM
--------------------------------------------------------------------~-> 

--
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

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to