Yes you're right, I am sure I am making it more complicated than it should be. 
The way I had it, was that in my renderer class (which  extends 
DataGridItemRenderer) depending on the column I would add another (I think it 
is termed) dropin renderer , one column was rendered with a link button, the 
other one with the linkbar. But for the life of me I don't understand why I 
can't add a listener to the linkbar that way. Forget adding a listenener on the 
linkbar buttons, the only way the row click event for the datagrid would work 
is if I clicked just outside of the linkbar but still within the cell so I 
couldn't even use the click event for the datagrid. Clicking on the button on 
the linkbar itself went nowhere.

Maybe it has something to do with putting a renderer within a renderer?? If you 
can follow what I did, please explain where in the world that mouseclick 
listener event would go and why I couldn't add the listener the parent renderer 
class (the one that extended DataGridItemRenderer).

I scratched all that and ended up making a separate mxml renderer for that 
column and instead of a linkbar, I just added a vbox with a repeater for 
generating hboxes with link buttons in them as in this link 
http://forums.adobe.com/message/164232#164232.  I may have overdid it on that 
one too but at least the eventlistener works. 

I really do appreciate the responses. Thanks for everyone's help!!!!!

--- In flexcoders@yahoogroups.com, "valdhor" <valdhorli...@...> wrote:
>
> I thionk you are over thinking this.
> 
> All you need to do is extend the class you wish to use as your item
> renderer. In the extended class, either add an event listener or
> override a handler.  In this case, that class is LinkBar. The LinkBar
> class has a clickHandler method already so you override that method to
> do what you want.
> 
> So, an Item Renderer based on LinkBar could look like:
> package Renderers
> {
>      import flash.events.MouseEvent;
>      import flash.net.*;
>      import mx.controls.LinkBar;
> 
>      public class LinkBarRenderer extends LinkBar
>      {
>          public function LinkBarRenderer()
>          {
>              super();
>          }
> 
>          override public function set data(value:Object):void
>          {
>              super.data = value;
>              if(value != null)
>              {
>                  var linksArray:Array = data.WebSites.split(",");
>                  dataProvider = linksArray;
>              }
>          }
> 
>          override protected function clickHandler(event:MouseEvent):void
>          {
>              navigateToURL(new URLRequest("http://"; +
> event.target.label), '_blank');
>          }
>      }
> }
> 
> 
> HTH
> 
> 
> Steve
> 
> --- In flexcoders@yahoogroups.com, "aramsdell2000" <aramsdell2000@>
> wrote:
> >
> > I have put aside the thoughts of making fancy hyperlinks, now I am
> just trying to understand events in the itemrenderer. I am ashamed to
> say that even after searching this subject in the forum and googling it,
> I still find myself struggling.
> >
> > I ended up trying a LinkBar as Tino suggested
> >
> > in the itemrenderer:
> > else if (column.dataField == "monitorlocations"){
> >  var linksArray:Array =
> String((data["monitorlocations"])).split("\n");
> >  var linkbarItemRendererFactory:ClassFactory = new
> ClassFactory(LinkBar);
> >  linkbarItemRendererFactory.properties = {dataProvider:linksArray,
> direction:"vertical",enabled:true };
> >  column.itemRenderer = linkbarItemRendererFactory;
> >  column.setStyle("verticalGap",5);
> >  column.addEventListener(ItemClickEvent.ITEM_CLICK,
> linkBarEventHandler);
> >
> >
> > Problem is that it seems like the click event on the button on the
> linkbar never makes it to the linkBarEventHandler which is a function
> inside this itemrenderer. I would at least think that this event would
> fire but setting a breakpoint in this eventhandler fuction, I can tell
> it never makes it there. The datagrid itemclick event doesn't even get
> called like it does in the other columns, which I think is a good
> indication that I can bubble up the linkbar clickItem event, I just
> can't figure out what I am doing wrong or even how to capture in a debug
> session what happens on that click event.
> >
> >
> > One post I read says :
> >
> > "Re: [flexcoders] Listem to an event sent by a DataGrid ItemRenderer
> >
> > In your item renderer, if you have control over the TimerEvent
> creation, set the "bubbles" parameter to true.  If you do not, you
> may want to catch the event in the renderer and  re-dispatch a new
> one with bubbles set to true.  This will allow your event to bubble
> out, up the parental chain until it reaches your application.  Then
> all you need to do is register for the event at the Application level."
> >
> >
> > Can I set the bubbles property to true somehow using the
> ItemRendererFactory approach I have above? If I can't, theoretically I
> can dispatch the event from the eventhandler (if I could get it to fire)
> and then listen for it in the file that my datagrid is created in.
> >
> > Alternative to bubbling up an event, maybe somehow I can add an
> eventlistener that calls a function using owner.document.myFunction?
> >
> >
> >
> >
> > --- In flexcoders@yahoogroups.com, "valdhor" valdhorlists@ wrote:
> > >
> > > As far as I know the code is open source but you could add a comment
> at his blog (http://www.jabbypanda.com/blog/?p=28).
> > >
> > > You will either have to disable the datagrids click event handler on
> that specific column or figure out a way to put each link in its own
> column.
> > >
> > > --- In flexcoders@yahoogroups.com, "aramsdell2000" <aramsdell2000@>
> wrote:
> > > >
> > > > Actually I am not so sure how this will work in a datagrid. One
> datagrid cell would have multiple hyperlink buttons. Right now the click
> event for the datagrid behaves differently depending on which column you
> click. In another column I have one link button per row. But for this
> one, I would have several link buttons in one row's cell. Do I do
> nothing on the datagrid's click event and then the listerner events for
> the links would take over? Haven't tried anything yet, just thinking
> about how to approach it.
> > > >
> > > > Thanks!
> > > >
> > > > --- In flexcoders@yahoogroups.com, "aramsdell2000"
> <aramsdell2000@> wrote:
> > > > >
> > > > > Oh wow, this looks great! Thank you! This looks like what I want
> to do, just curious, how do I cite it if I use it/ modified version of
> it?? I can add a link to his website and blog in the code?
> > > > >
> > > > > --- In flexcoders@yahoogroups.com, "valdhor" <valdhorlists@>
> wrote:
> > > > > >
> > > > > > Here is a quick and dirty example using the hyperlink
> component from
> > > > > > jabbypanda
> (http://jabbypanda.com/labs/hyperLink/srcview/index.html):
> > > > > >
> > > > > > <?xml version="1.0" encoding="utf-8"?>
> > > > > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> > > > > > layout="absolute" width="700">
> > > > > >      <mx:Script>
> > > > > >          <![CDATA[
> > > > > >              import mx.collections.ArrayCollection;
> > > > > >
> > > > > >              [Bindable] public var initDG:ArrayCollection =
> new
> > > > > > ArrayCollection([
> > > > > >              {Company: 'Apple Computer', WebSites:
> > > > > > 'www.apple.com,store.apple.com,developer.apple.com'},
> > > > > >              {Company: 'Google', WebSites:
> > > > > > 'www.google.com,code.google.com,mail.google.com'}
> > > > > >              ]);
> > > > > >          ]]>
> > > > > >      </mx:Script>
> > > > > >      <mx:DataGrid id="myGrid" dataProvider="{initDG}"
> > > > > > rowCount="{initDG.length}">
> > > > > >          <mx:columns>
> > > > > >              <mx:DataGridColumn width="120"
> dataField="Company"
> > > > > > editable="false"/>
> > > > > >              <mx:DataGridColumn width="500"
> dataField="WebSites"
> > > > > > itemRenderer="Renderers.LinksRenderer"/>
> > > > > >          </mx:columns>
> > > > > >      </mx:DataGrid>
> > > > > > </mx:Application>
> > > > > >
> > > > > > LinksRenderer.as:
> > > > > > package Renderers
> > > > > > {
> > > > > >      import flash.net.*;
> > > > > >      import htmltext.controls.HyperLink;
> > > > > >      import htmltext.controls.events.HyperlinkEvent;
> > > > > >      import mx.containers.HBox;
> > > > > >
> > > > > >      public class LinksRenderer extends HBox
> > > > > >      {
> > > > > >          private var link1:HyperLink = new HyperLink();
> > > > > >          private var link2:HyperLink = new HyperLink();
> > > > > >          private var link3:HyperLink = new HyperLink();
> > > > > >
> > > > > >          public function LinksRenderer()
> > > > > >          {
> > > > > >              super();
> > > > > >          }
> > > > > >
> > > > > >          override public function set data(value:Object):void
> > > > > >          {
> > > > > >              super.data = value;
> > > > > >              if(value != null)
> > > > > >              {
> > > > > >                  var linksArray:Array =
> data.WebSites.split(",");
> > > > > >                  link1.linkText = linksArray[0];
> > > > > >                 
> link1.addEventListener(HyperlinkEvent.HYPERLINK_CLICK,
> > > > > > hyperLinkClicked);
> > > > > >                  link2.linkText = linksArray[1];
> > > > > >                 
> link2.addEventListener(HyperlinkEvent.HYPERLINK_CLICK,
> > > > > > hyperLinkClicked);
> > > > > >                  link3.linkText = linksArray[2];
> > > > > >                 
> link3.addEventListener(HyperlinkEvent.HYPERLINK_CLICK,
> > > > > > hyperLinkClicked);
> > > > > >                  addChild(link1);
> > > > > >                  addChild(link2);
> > > > > >                  addChild(link3);
> > > > > >              }
> > > > > >          }
> > > > > >
> > > > > >          private function
> hyperLinkClicked(event:HyperlinkEvent):void
> > > > > >          {
> > > > > >              navigateToURL(new URLRequest("http://"; +
> > > > > > event.target.linkText), '_blank');
> > > > > >          }
> > > > > >      }
> > > > > > }
> > > > > > --- In flexcoders@yahoogroups.com, Tino Dai <oberoc@> wrote:
> > > > > > >
> > > > > > > Have you looked at the class LinkBar? I think that would be
> a good way
> > > > > > to
> > > > > > > return a multiple buttons in a cell of a datagrid.
> > > > > > >
> > > > > > >
> http://livedocs.adobe.com/flex/3/langref/mx/controls/LinkBar.html
> > > > > > >
> > > > > > > -Tino
> > > > > > >
> > > > > > >
> > > > > > > On Wed, Jan 13, 2010 at 10:11 AM, aramsdell2000
> > > > > > aramsdell2000@:
> > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > OK, that's the problem. I don't know how to add multiple
> link
> > > > > > buttons
> > > > > > > > through action script. And here goes my feeble attempt at
> explaining
> > > > > > what I
> > > > > > > > did so that it makes sense:
> > > > > > > >
> > > > > > > > This is how I am now populating the column with multiple
> hyperlinks,
> > > > > > using
> > > > > > > > the itemrenderer approach from Alex's Flex Closet "HTML in
> an Item
> > > > > > Renderer"
> > > > > > > > on this website:
> > > > > > > > http://blogs.adobe.com/aharui/item_renderers/
> > > > > > > >
> > > > > > > > var params:Array = (data[column.dataField]).split(", ");
> > > > > > > > var urls:String = "";
> > > > > > > > for (var i:Number=0; i < params.length; i++)
> > > > > > > > {
> > > > > > > > ...
> > > > > > > > urls += "<a href='http://webaddress?charname=";
> > > > > > > > + params[i]
> > > > > > > > + "&amp;someid="
> > > > > > > > + station
> > > > > > > > + "&amp;anotherid="
> > > > > > > > + org
> > > > > > > > + "' target='_blank'>" + params[i] + "</a>, ";
> > > > > > > > }
> > > > > > > > ...
> > > > > > > > cdataTag = urls;
> > > > > > > > .....
> > > > > > > > htmlText = cdataTag;
> > > > > > > >
> > > > > > > > but only a right click works to open a new window. I would
> like it
> > > > > > to work
> > > > > > > > with just clicking on the text like a normal HTML href.
> > > > > > > >
> > > > > > > > So what I wanted to do was have each string be a link
> button (except
> > > > > > i
> > > > > > > > don't really like the fact that it looks like a button). I
> have been
> > > > > > > > experimenting with using a single linkbutton in a
> datagridcolumn for
> > > > > > > > something similar:
> > > > > > > >
> > > > > > > > else if (column.dataField == "details"){
> > > > > > > > var linkItemRendererFactory:ClassFactory = new
> > > > > > ClassFactory(LinkButton);
> > > > > > > >
> > > > > > > > var someid:String = data["someid"];
> > > > > > > > var anotherid:String = data["anotherid"];
> > > > > > > >
> > > > > > > > var queryExpr:String = "&SomeParameterId=" + someid +
> > > > > > > > "&AnotherParameterId=" + anotherid + "restofurl";
> > > > > > > > //this line isn't quite working either but I hope you get
> the idea..
> > > > > > > > //linkItemRendererFactory.properties =
> > > > > > > >
> {label:data[column.dataField],click:"callGetDetailsWebService(" +
> > > > > > queryExpr
> > > > > > > > + ");"};
> > > > > > > >
> > > > > > > > linkItemRendererFactory.properties =
> {label:data[column.dataField]};
> > > > > > > > column.itemRenderer = linkItemRendererFactory;
> > > > > > > >
> > > > > > > > I am not sure how to expand the above code to add multiple
> buttons.
> > > > > > Instead
> > > > > > > > of using an inline? renderer, do I have to make a new link
> button
> > > > > > class and
> > > > > > > > extend it or can I somehow write it into the custom
> > > > > > > > CustomDataGridItemRenderer class I have now that extends
> > > > > > > > DataGridItemRenderer.
> > > > > > > >
> > > > > > > > Hopefully that makes sense!
> > > > > > > >
> > > > > > > > Thanks!
> > > > > > > > Amy
> > > > > > > >
> > > > > > > >
> > > > > > > > --- In flexcoders@yahoogroups.com
> <flexcoders%40yahoogroups.com>,
> > > > > > Tino Dai
> > > > > > > > oberoc@ wrote:
> > > > > > > > >
> > > > > > > > > Some code would help
> > > > > > > > >
> > > > > > > > > On Tue, Jan 12, 2010 at 8:36 PM, aramsdell2000
> amy.ramsd...@wrote:
> > > > > > > >
> > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > I have a datagrid column that for each row, has
> several text
> > > > > > values
> > > > > > > > each
> > > > > > > > > > with its own hyperlink.
> > > > > > > > > >
> > > > > > > > > > Ex: the data in the datafield looks like: "Atext,
> Btext, Ctext".
> > > > > > As it
> > > > > > > > is
> > > > > > > > > > now, I was able to add href anchor tags but they only
> open in a
> > > > > > new
> > > > > > > > window
> > > > > > > > > > with the right mouse click. The datagrid item click
> event takes
> > > > > > over
> > > > > > > > the
> > > > > > > > > > left mouse click and I am not sure how to prevent
> that. So I
> > > > > > thought I
> > > > > > > > would
> > > > > > > > > > add multiple link buttons in the datagrid column
> instead. My
> > > > > > question
> > > > > > > > is how
> > > > > > > > > > to add these multiple buttons using an itemrenderer in
> > > > > > actionscript. If
> > > > > > > > I
> > > > > > > > > > was adding just one I would assume it would be
> > > > > > datagrdcol.itemrenderer
> > > > > > > > = new
> > > > > > > > > > ClassFactory(LinkButton) and then you just set the
> properties of
> > > > > > the
> > > > > > > > link
> > > > > > > > > > button. But how do you do it if there are multiple
> buttons for
> > > > > > the data
> > > > > > > > in
> > > > > > > > > > the datafield. Do you extend the LinkButton or list
> data in a
> > > > > > > > > > customitemrenderer class? How?
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>


Reply via email to