Loading ...
Sorry, an error occurred while loading the content.

165791Re: [flexcoders] Nested TabNabvigator/Repeater error

Expand Messages
  • Tom McNeer
    Nov 5, 2013
    • 0 Attachment
      Hi Alex,

      Thanks for your suggestion. It may be a couple of days before I can get back to testing it; I'm reworking many backend routines and database functions/procs for the same application.

      But when I'm able to test it, I'll report back.

      As always, thanks for your generous help.


      On Tue, Nov 5, 2013 at 1:47 PM, Alex Harui <aharui@...> wrote:
       

      So if I understand correctly, clicking on some nested Tab changes some other ViewStack's selectedIndex.  If that's correct, try subclassing the ViewStack's selectedIndex setter so you can set a breakpoint and catch when only that ViewStack is changed.  Then the call stack should contain some good clues.

      Date: Monday, November 4, 2013 3:31 PM
      To: "flexcoders@yahoogroups.com" <flexcoders@yahoogroups.com>
      Subject: Re: [flexcoders] Nested TabNabvigator/Repeater error [4 Attachments]

       

      I've finally had time to check this out a little further.

      As a reminder, I'm creating nested TabNavigator elements dynamically. I avoided using a Repeater and attached a CollectionChange event listener to the ArrayCollection that is the main data provider. The function called by the listener walks through the structure, creating TabNavigators with VBox children, and at the bottom level, a custom component (DocDataGrid) that is a VBox which wraps a DataGrid.

      The problem is that a click on a tab in the lowest-level TabNavigator doesn't display the selected child. Rather, it sends the user several levels back up the component tree.

      I've followed the click through TabBars and NavBars and Buttons till there's a click event fired where I can't determine what's supposed to hear the click. The selectedIndex appears correct through each level in the inheritance, but then the process fails.

      I've even added some hack-y invalidateDisplayList() calls in hopes that they might have an effect.

      I'm including the code that creates the elements, along with some screen shots that I hope will better explain what's going on.

      If you have time to look them over, and if you see where I'm going wrong, I would certainly appreciate any pointers.

      Thanks very much in advance.

      private function buildUI(e:CollectionEvent):
      void{
                      clearTabs();
                      var vb:VBox;
                      var tn:TabNavigator;
                      var ddg:DocDataGrid;
                      for(var i:int=0;i<acCaseDocuments.length;i++){
                          var arSubtypes:Array = acCaseDocuments[i].subtypes as Array;
                          vb = new VBox();
                          vb.id='docType' + i;
                          vb.setStyle('horizontalAlign','center');
                          vb.label = acCaseDocuments[i].friendlyName as String;
                          vb.percentWidth=95;
                          vb.percentHeight=95;
                          vb.styleName='contentWhite';
                          tn = new TabNavigator();
                          tn.id='docSubtab' + i;
                          tn.percentWidth=100;
                          tn.percentHeight=100;
                          tn.x=5;
                          tn.y=5;
                          tn.setStyle("backgroundAlpha",0);
                          tn.setStyle('borderThickness',1);
                          tn.setStyle('paddingTop',0);   
                          tn.creationPolicy="all";
                          for(var j:int=0;j<arSubtypes.length;j++){
                              ddg = new DocDataGrid();
                              ddg.id= 'docSubtype' + j;
                              ddg.label=arSubtypes[j].friendlyName as String;
                              ddg.gridData.source=arSubtypes[j].documents as Array;
                              ddg.gridData.refresh();
                              tn.addChild(ddg);
                          }
                          tn.invalidateDisplayList();
                          vb.addChild(tn);
                          docTabs.addChild(vb);
                      }
                      setFirstTab(e);
                  }


      On Thu, Oct 24, 2013 at 12:32 PM, Alex Harui <aharui@...> wrote:
       

      Never tried right clicking on the framework files before.  You're right that it doesn't work.  But double-clicking should set a breakpoint.  It does for me.

      Date: Thursday, October 24, 2013 7:44 AM

      To: "flexcoders@yahoogroups.com" <flexcoders@yahoogroups.com>
      Subject: Re: [flexcoders] Nested TabNabvigator/Repeater error

       

      Alex,

      Thanks again for your reply. Sorry I was unclear. I wasn't suggesting that the framework had code to switch the ViewStack on click.

      I was responding to your comment about the concern being the logic that responds to the change in the TabNavigator and TabBar. And I simply meant that my code does not contain any handlers for any actions on the TabNavigators created in my AS code, nor on the underlying TabBars. But rather, the click on the visible Tab that _appears_ to be responsible for switching the ViewStack is being handled somehow by the framework, since I have not overridden it.

      I realize that the proper course would be to follow the event into the framework files. However, in my initial post, I was hoping that someone might have experienced a similar problem and know a simple solution.

      I am now trying to follow the event down into the framework. But I'm running into what seems like a dumb problem: I am unable to set breakpoints in the framework files. I can search for and open class files in the correct version of the framework; but a right-click in the left margin does not bring up a context menu at all.

      The framework is being merged into the code at compile time.

      I know this may be a silly question, but can you tell me why Flash Builder (4.6) might be acting this way?


      On Wed, Oct 23, 2013 at 2:40 AM, Alex Harui <aharui@...> wrote:
       

      I'm not sure what you mean by "the framework".  AFAIK, the framework doesn't have any code that automatically switches ViewStack views based on mouse activity.

      But you could put a breakpoint on the ViewStack code and see why it is changing.

      -Alex

      Date: Tuesday, October 22, 2013 12:30 PM
      To: "flexcoders@yahoogroups.com" <flexcoders@yahoogroups.com>
      Subject: Re: [flexcoders] Nested TabNabvigator/Repeater error

       

      Hi Alex,

      Thanks very much for the reply.


      On Tue, Oct 22, 2013 at 12:56 PM, Alex Harui <aharui@...> wrote:
      In the AS version, I would guess there are relatively few ways to "switch to a different screen".  

      Yeah, I would agree. The reason I used the vague "switch to a different screen" is that the resulting action is nothing that is called in the component or even its parent.

      I'll lay this out as quickly as I can:

      There's a view we'll call Cases which has a ViewStack that consists of "Case Results" and "Case Details." A search triggered from a parent of the Cases view results in a grid in Case Results being populated. A click on a row in the grid calls the server for data on an individual Case and switches to the Case Details view.

      That view contains a TabNavigator for various aspects of the Case, including Documents. The nested TabNavigators I'm trying to create are within that Documents view.

      When I say that a click on any second-level (Document subtype) tab goes "to a different screen," what happens is that everything is switched back to the Case Results view - taking you back to the first element in the Cases ViewStack. There's no action or event defined in any of the child views inside the Case Details TabNavigator that would switch the view that way.

      That's why I find it confounding.
       
      If you put a breakpoint on code that does that, does it get hit and will the stack info show you how it got there?

      The code would be in the framework. It would just be the handler for a click on the TabBar.
       
      The TabBar children should just be Tabs that dispatch events.  The logic that responds to the change event should be the main concern.

      Thanks. I understand that. But I'm not writing any code to react to the click event. It's just the default action from the framework, which should be to make the box corresponding to the Tab the selectedChild of the TabNaviagator.

      I have tried walking through my ActionScript, and the oddity I see (which I may not really understand) is that even after all the custom components are added as children to one of the second-level TabNavigators, the TabNavigator and its TabBar show in debugging as having a different number of children.



      --
      Thanks,

      Tom

      Tom McNeer
      MediumCool
      http://www.mediumcool.com
      1735 Johnson Road NE
      Atlanta, GA 30306
      404.589.0560




      --
      Thanks,

      Tom

      Tom McNeer
      MediumCool
      http://www.mediumcool.com
      1735 Johnson Road NE
      Atlanta, GA 30306
      404.589.0560




      --
      Thanks,

      Tom

      Tom McNeer
      MediumCool
      http://www.mediumcool.com
      1735 Johnson Road NE
      Atlanta, GA 30306
      404.589.0560




      --
      Thanks,

      Tom

      Tom McNeer
      MediumCool
      http://www.mediumcool.com
      1735 Johnson Road NE
      Atlanta, GA 30306
      404.589.0560
    • Show all 16 messages in this topic