[Seaside] #call without #answer
Nick Ager
nick.ager at gmail.com
Thu Dec 17 17:21:00 UTC 2009
Hi,
I have an application that has a body section, where the body section
might be one of many components.For example:
TemplateComponent
- HeaderComponent
- BodyComponent - one of BodyOne | BodyTwo | etc components.
- FooterComponent
The question is whether to use #call:/#show: to change the
BodyComponent *or* use Announcements to set a different component in
TemplateComponent which then subsequently rendered in place of the
BodyComponent?
This question has been raised a few times before [1],[2],[3], however
the answers given didn't help me understand what happens when a
component uses #call:/#show: without the corresponding #answer:. My
concern is that the stack of AnswerHandlers/Delegates increases for
each #show/#call without the corresponding #answer. I built a simple
app to try to understand what's going and it appears that the stack
grows for each #show/#call. I click on 'another component' anchor and
as expected the #show: method results in a new component being
displayed. Clicking 'another component' repeatedly and then
subsequently clicking on the 'answer' anchor results in the previous
component being revealed all the way back to the starting component.
My conclusion is that it's *bad* to use #call:/#show: without the
corresponding #answer: as a AnswerHandlers/Delegates list is
increasing without items being removed. OR have I missed something?
Thanks
Nick
--
WAComponent subclass: #TestMultipleShows
instanceVariableNames: 'theDisplayComponent'
children
^ Array with: theDisplayComponent
initialize
super initialize.
theDisplayComponent := self randomDisplayComponent.
randomDisplayComponent
^ TestMultipleShowsComponent value: 1000 atRandom.
renderContentOn: html
html div: [html render: theDisplayComponent].
html anchor callback: [theDisplayComponent show: self
randomDisplayComponent]; with: 'another component'
---
WAComponent subclass: #TestMultipleShowsComponent
instanceVariableNames: 'value'
renderContentOn: html
html div: value.
html anchor callback: [self answer: true]; with: 'answer'.! !
value: aValue
value := aValue! !
#TestMultipleShowsComponent class>>value: aValue
^ self new value: aValue.
[1] http://lists.squeakfoundation.org/pipermail/seaside/2008-April/017575.html
[2] http://lists.squeakfoundation.org/pipermail/seaside/2007-January/010298.html
[3] http://lists.squeakfoundation.org/pipermail/seaside/2003-September/002142.html
More information about the seaside
mailing list