[Seaside] Making use of SUElement>>siblings, et al
Lukas Renggli
renggli at gmail.com
Sun Jun 3 08:04:28 UTC 2007
> I was playing around with SUElement, and noticed that there doesn't
> actually seem to be a way to use the results of the methods that
> return Enumerables - #siblings, #descendants, etc.
Probably not. I added those methods for completeness, but never used
them myself. Obviously these are not well integrated with the rest of
the framework.
> I know there's SUSelector, which implements #do:, #invoke:arguments:
> and similar, but only applies to a collection that results from
> querying via a selector, not from a collection derived directly from a
> relationship to a specific element.
I was not happy with the solution of SUSelector, never used it myself
and didn't know of anybody else using it.
> Also, this adds duplication, as the methods are essentially
> copy-and-pasted straight from SUSelector - but I'm not sure how best
> to factor them out, and since it's only a local modification, I don't
> want to go messing with the hierarchy anyway.
You are asking for traits and this is not the the only place where we
have duplication in Seaside and Scriptaculous ;-)
In this particular case it would be maybe better to factor out the
functionality to an enumerator object. I am thinking of something
along:
(html element id: 'foo') siblings enumerator
do: [ :each | ... ]
This would make more sense as it would not clutter SUElement with
enumeration code, as SUElement itself is not enumerable.
> In any case - this allowed me to use the following code:
> (script element id: id) siblings
> each: [ :each | each element removeClassName: #active ]
>
> Or, the invoke equivalent:
> (script element id: id) siblings
> invoke: #removeClassName arguments: (Array with: #active).
Please commit changes to the Seaside repository. And add some tests ;-)
Lukas
--
Lukas Renggli
http://www.lukas-renggli.ch
More information about the Seaside
mailing list