[Seaside] anchors behaving like buttons?
Nevin Pratt
nevin at smalltalkpro.com
Sat Mar 29 21:54:47 CET 2003
For what it's worth, and if anybody cares, I rearchitected and
eliminated this scheme from my test site.
Like a dummy, I didn't realize that this scheme would result in a new
session being created when the link got clicked on.
Nevin
Nevin Pratt wrote:
>
>
> Derek Brans wrote:
>
>> In Seaside, is there a way to have an anchor tag that will submit a
>> form and perform an action (behaving just like a button)?
>>
>
> I've got a scheme that seems to work OK:
>
> Suppose you've got a component 'Foo', with launch URL of
> 'http://localhost/seaside/foo' (or whatever machine and port you
> choose). Now, suppose the 'Foo' component has links 'red' and 'green'
> in the GUI, which you want to use to invoke methods #red and #green on
> component Foo when the links are clicked on.
>
> 1. Define the URL for the 'red' link to be '/seaside/foo/red', and for
> the 'green' link to be '/seaside/foo/green'.
>
> 2. Give 'Foo' an instance variable called 'targets', and then create
> an #initialize method of 'Foo' thus:
>
> initialize
> targets _ OrderedCollection new.
> targets add: #red;
> add: #green
>
> 3. Give 'Foo' a 'lastTarget' instance variable, which will be used to
> prevent recursive circularities, as shown later.
>
> 4. Put the following in Foo's #renderContentOn:
>
> renderContentOn: html
> | path sel |
> path _ self session path.
> sel _ (path copyAfterLast: $/) asLegalSelector asSymbol.
> (lastTarget ~= sel
> and: [targets includes: sel])
> ifTrue: [lastTarget _ sel.
> ^self perform: sel].
> { ... the rest of the normal rendering code here ... }
>
> With the above, the 'red' and 'green' links will invoke the #red and
> #green target methods (respectively) of the component, just like a
> button does.
>
> You can, if you wish, easily eliminate the need for the 'targets'
> instance variable by, for example, looking for methods within a
> certain method category, or for methods that begin (or end) with some
> common string, or even be more general by replacing 'targets includes:
> sel' with something like 'self respondsTo: sel', but I think I would
> prefer to keep strict control over what methods can be invoked via the
> URL with this scheme. So, I would use a 'targets' instance variable
> to explicitly define allowable methods that can be invoked with this
> scheme.
>
> Nevin
>
>
> _______________________________________________
> Seaside mailing list
> Seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/listinfo/seaside
>
>
More information about the Seaside
mailing list