I'm running into problems trying to use the MenuDemo (http://blog.leugim.com.mx/index.php/2008/01/03/seaside-menus/) approach and Tasks. Take a look the following scenario:
I'm using a MainComponent (like MDMain in the tutorial), and this holds a task instance variable to the MainTask and a content iVar for the menu item components (initialized with a "null" component, WAComponent) . In the go method I have: self loginUser ifTrue: [ self isolate: [ result := self call: WelcomeComponent new (more calls here) ] ] Therefore my UI is like this: LoginComponent | | true | The user is ok, then shows the Menu from MainComponent (the menu is rendered only if the user is authenticated) and the WelcomeComponent from the task. (content still would be just WAComponent like the tutorial) | | | | | Menu | WelcomeComponent | | When I click a menu item, content needs to be replaced with the NewComponentFromMenu, but the WelcomeComponent is still there, displayed below the NewComponentFromMenu: | | | | | Menu | NewComponentFromMenu | | | | | | | | WelcomeComponent | | I understand this happens because the MenuDemo do not use call: message, but I don't know how to "replace" the WelcomeComponent with the NewComponentFromMenu when a menu item is clicked. I tried setting the content iVar to the WelcomeComponent when enters the isolate: but this just shows two times the WelcomeComponent: | | | | | Menu | WelcomeComponent | | | | | | | | WelcomeComponent | | Any idea how to solve this? Thanks _______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
2008/2/1, William Hubbard <[hidden email]>:
I'm running into problems trying to use the MenuDemo (<a href="http://blog.leugim.com.mx/index.php/2008/01/03/seaside-menus/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://blog.leugim.com.mx/index.php/2008/01/03/seaside-menus/) approach and Tasks. Take a look the following scenario: I forgot to paste the current main render method I'm using: MainComponent>>renderContentOn: html ( self username isAuthenticated ] ) ifTrue: [ html render: menu ]. html render: content. html render: task _______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
William Hubbard wrote:
> > > 2008/2/1, William Hubbard <[hidden email] > <mailto:[hidden email]>>: > > I'm running into problems trying to use the MenuDemo > (http://blog.leugim.com.mx/index.php/2008/01/03/seaside-menus/) > approach and Tasks. Take a look the following scenario: > > I'm using a MainComponent (like MDMain in the tutorial), and this > holds a task instance variable to the MainTask and a content iVar > for the menu item components (initialized with a "null" component, > WAComponent) . In the go method I have: > > self loginUser ifTrue: [ > self isolate: [ > result := self call: WelcomeComponent new > (more calls here) > ] > ] > > Therefore my UI is like this: > > LoginComponent > | > | > true > | > > The user is ok, then shows the Menu from MainComponent (the menu is > rendered only if the user is authenticated) and the WelcomeComponent > from the task. (content still would be just WAComponent like the > tutorial) > > | | > | | > | Menu | WelcomeComponent > | | > > When I click a menu item, content needs to be replaced with the > NewComponentFromMenu, but the WelcomeComponent is still there, > displayed below the NewComponentFromMenu: > > > | | > | | > | Menu | NewComponentFromMenu > | | > | | > | | > | | WelcomeComponent > | | > > I understand this happens because the MenuDemo do not use call: > message, but I don't know how to "replace" the WelcomeComponent with > the NewComponentFromMenu when a menu item is clicked. I tried > setting the content iVar to the WelcomeComponent when enters the > isolate: but this just shows two times the WelcomeComponent: > > | | > | | > | Menu | WelcomeComponent > | | > | | > | | > | | WelcomeComponent > | | > > > Any idea how to solve this? > Thanks > > > > I forgot to paste the current main render method I'm using: > > MainComponent>>renderContentOn: html > > ( self username isAuthenticated ] ) > ifTrue: [ html render: menu ]. > html render: content. > html render: task > I'am afraid I don't understand what are you trying to do. In my app I have choosen to use Announcements because of the flexibility it gives you. It permits you to un-wire your components, so your children components don't need to know who their parent is. My app consists from an Main component whose role is to be a container for other components, and, this is the important part, this children component are swapped or interchanged all the time. Main has 4 components: (header, menu, content and footer) and Main can substitute any of then at any time in response to actions from the user. When the user clicks an entry from the menu (a child component) the menu doesn't change the content component (another child) but throws an announcement to anyone interested. It happens that the component that registered interest in this particular message is the Main component (the parent component), so when the menu component sends the announcement, the Main component receives it and take care of responding accordingly. The main component renders itself this way: Main>>renderContentOn: html html div id: 'main'; with: [ html div id: 'header'; with: [ html render: header ]. html div id: 'menu'; with: [ html render: menu ]. html div id: 'content'; with: [ html render: content ]. html div id: 'footer'; with: [ html render: footer ]] The main component responds to this announcement changing the objects refered by the ivars (header, footer, content, main) so when the user wants to see a list of items, for example, the main component takes the list that comes with the announcement, creates a new ListComponent and set the content ivar to point to this new component, forgetting what the old component the content ivar pointed to. Something like this: Main>>itemList: anAnnouncement self pageTitle: 'Search results'. content := ItemList items: anAnnouncement items This method is called by Main as response to the announcement. ItemList is just a new component (items is a handy constructor for this class) that replaces the old component pointed to by the content ivar. This way, when Main is rendered again, it will show the new content (the item list) instead of the old content (for example the welcome message) I hope this helps you, Miguel Cobá > > > ------------------------------------------------------------------------ > > _______________________________________________ > seaside mailing list > [hidden email] > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside _______________________________________________ seaside mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside |
Free forum by Nabble | Edit this page |