[Seaside] Garbage Collection/Handling

Lukas Renggli renggli at gmail.com
Fri Apr 13 12:24:01 UTC 2007

> Rootcomponent>>children
>     ^Array with: SomeComponent new.
> Rootcomponent>>renderContentOn: html
>     html render: SomeComponent new.

That wont work due to different reasons:

- The object you return from children is not the same object that you
render in #renderContentOn:

- With every request you create a new instance of SomeComponent and
loose all the existing state. You should never need to initialize
components in rendering code.

> Now, that is a *very* simple example - but it does demonstrate what I am
> referring to - there are now two instances of SomeComponent, when only
> one is needed. This will be resolved by a lazy loader, but for more
> complex examples it is not easy.

This is standard:

     super initialize.
     some := SomeComponent new.

     ^Array with: some

Rootcomponent>>renderContentOn: html
     html render: some

> I am still learning with Seaside, but so far I can see that the
> #children are then processed with #childrenDo: but I still ask "Why?"
> Why must they have this processing here, and not at rendering?

Because Seaside is stateful. It needs the children information to
process callbacks, to render the <head>, to enable REST-ful URLs and
probably other things ...


Lukas Renggli

More information about the Seaside mailing list