[Seaside] Seaside: children problem

Philippe Marschall philippe.marschall at gmail.com
Mon Dec 31 11:16:57 UTC 2007


2007/12/29, an organic <seasidebeginner at gmail.com>:
> Hi,
>
> WAComponent subclass: #Site
>     instanceVariableNames: 'head menu'
>     classVariableNames: ''
>     poolDictionaries: ''
>     category: 'Pom'
>
> children
>     ^ Array with: self head with: self menu
>
> initialize
>     super initialize.
>
>     head := Head new.
>     menu := Menu2 new.
>
> Is this info better?
> But from menu2 in renderContentOn i call next Class WMenuItem which i want
> use to render my items.
> When i render items direct in menu2 component it works fine. But i want
> learn render items in next component (because items are hierarchical
> structure and WMenuItem can work recursively)
>
> When i write render i think write in html to website ;).
>
> I thought that problem is here: menu2 dont have dynamically created
> WMenuItem in his children array. But i am not able to add it into this array
> (children of menu2). When i change code renderContentOn of Menu2:
>
> renderContentOn: html
>     | temp |
>     html
>         unorderedList: [items do: [:item | temp := WMenuItem new. self
> children: self children, temp. html div class: 'a'; with:  (temp kategorie:
> item) ]]

#, is the concatenation "operator", it concatenates two collections.
temp is not a collection but an instance of WMenuItem.

Cheers
Philipppe

> i get this error:
> Error: Instances of WMenuItem are not indexable
>
>
> 2007/12/29, Rajeev Lochan <lochan94 at gmail.com>:
> > hi,
> > Have you defined/declared menu as an instance variable in class Site (I
> hope thats the class n ame for the first set of code). It would be clear if
> you can provide that info.
> >
> > The error you have got is due to the fact that the method
> > children
> > ^ Array with: menu
> >
> > is not triggered properly.
> >
> > Update if you still encounter any problem,
> > Hope that helps,
> > Rajeev
> >
> >
> >
> > On Dec 29, 2007 5:48 PM, an organic < seasidebeginner at gmail.com> wrote:
> >
> > >
> > > Hello,
> > >
> > > i am new with seaside and i want make this demo:
> > >
> > > class Site root component:
> > >
> > > children
> > >     ^ Array with: self menu
> > >
> > > renderContentOn: html
> > >     html div class: 'site'; with: [
> > >         html div class: 'menu'; with: self menu.
> > >         ]
> > >
> > > initialize
> > >     super initialize.
> > >
> > >     menu := Menu2 new.
> > >
> > > +canberoot and accessors for menu
> > >
> > >
> > > class Menu2 instance variables: items
> > > initialize
> > >     super initialize.
> > >     items := OrderedCollection new.
> > >     items
> > >         add: (Item new value: '1').
> > >     items
> > >         add: (Item new value: '2').
> > >     items
> > >         add: (Item new value: '3')
> > >
> > > renderContentOn: html
> > >     html
> > >         unorderedList: [items do: [:item | html div class: 'a'; with:
> (SubMenu new item: item) ]]
> > >
> > > class Item instanceVar value
> > > renderContentOn: html
> > >     html text: value.
> > >
> > >
> > >
> > > WAComponent subclass: #SubMenu
> > >     instanceVariableNames: 'item itemEditor'
> > >     classVariableNames: ''
> > >     poolDictionaries: ''
> > >     category: 'Pom'
> > >
> > > editItem: aItem
> > >     self itemEditor item: aItem copy.
> > >     (self call: self itemEditor)
> > >         ifTrue: [aItem copyFrom: self itemEditor item]
> > >
> > > initialize
> > >     super initialize.
> > >
> > >     itemEditor := ItemEditor new.
> > >
> > > renderContentOn: html
> > >     html
> > >         listItem: [html text: ' a ' , self item value.
> > >             html anchor
> > >                 callback: [self editItem: self item];
> > >                  with: 'e']
> > >
> > > and itemEditor, i think editors is fine.
> > >
> > > i think problem is in menu2 when i create new object subMenu because
> when i click on 'e' and i want edit item i get error:
> > >
> > >
> > > Possible Causes
> > >
> > > you do not implement #children correctly
> > > you do not backtrack #children correctly
> > > you do not implement #states correctly
> > > Stack Trace
> > >
> > > thisContextWARenderContinuation>>componentsNotFound:
> selfa WARenderContinuation aCollectionan Array(a SubMenu)
> > > thisContextWARenderContinuation>>unprocessedCallbacks:
> selfa WARenderContinuation aCollectionan Array(a WAActionCallback)owners an
> Array(a SubMenu) eacha WAActionCallback
> > > thisContextWARenderContinuation>>processCallbacks:
> selfa WARenderContinuation aRequesta WARequest GET /seaside/sitelastPosition
> 0 callbackStreama WACallbackStreameach a WAToolFrame
> > > thisContext[] in WARenderContinuation>>handleRequest:
> {[self processCallbacks: aRequest]} self a WARenderContinuationaRequesta
> WARequest GET /seaside/site rnil
> > > thisContext BlockContext>>on:do: self[] in
> WARenderContinuation>>handleRequest: {[self
> processCallbacks: aRequest]} exception an ExceptionSet handlerAction[] in
> WARenderContinuation>>withNotificationHandler: {[:n | n]}
> handlerActivetrue
> > >
> > > I hope it's quite clear. Thnx for help
> > >
> > > _______________________________________________
> > > seaside mailing list
> > > seaside at lists.squeakfoundation.org
> > >
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> > >
> > >
> >
> >
> >
> > --
> > Rajeev Lochan
> >
> > Co-founder, AR-CAD.com
> >
> > http://www.ar-cad.com
> > +91 9243468076 (Bangalore)
> > 080 65355873
> > _______________________________________________
> > seaside mailing list
> > seaside at lists.squeakfoundation.org
> >
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> >
> >
>
>
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
>


More information about the seaside mailing list