Everytime I started to answer, you pretty much identified exactly my 
response in your following paragraph.

For some View's, sure, just bind it to a ModelLocator, and you're good. 
Others are too nested, and need context, which forces you to move the logic 
higher up to prevent too much coupling.  As you say, depends on scope.

To confirm, I DO use Cairngorm 1 & 2 in my day job & personal work.  The 
only thing I do differently is Command callbacks, and use my own responder 
class.  Both of those are extremely minor points, and anyone using Cairngorm 
wouldn't immediately recognize those things as non-Cairngorm.

It all "depends" as you say.

----- Original Message ----- 
From: "Tim Hoff" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Monday, July 10, 2006 4:37 PM
Subject: [flexcoders] Re: Accessing a datagrid inside a different viewstate


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








--
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 --------------------~--> 
Great things are happening at Yahoo! Groups.  See the new email design.
http://us.click.yahoo.com/TISQkA/hOaOAA/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