[Seaside] Re: Seaside Async and form submission

Carl Gundel carlg at libertybasic.com
Wed Feb 18 21:40:46 UTC 2009


I tried this with Seaside 2.8 with the same results.  :-/  I also  
noticed that my renderOnHtml: method was rendering the form again, so  
I put the form code in the renderContentOn: method.  No difference.

Okay, I can see that this can be made to work (sort of) by assigning  
the liveCallback to the selectTag, but this just doesn't meet my  
needs.  Isn't there some way to force a form's contents to be  
submitted when an anchor has a liveCallback?  Shouldn't an Ajax action  
be able to use all the contents of a form?

-Carl

On Feb 18, 2009, at 2:42 PM, Carl Gundel wrote:

>
> On Feb 18, 2009, at 12:59 PM, Carl Gundel wrote:
>
>> I'm using Async with my Run BASIC project.  I am still using  
>> Seaside 2.6, but I plan to migrate forward as soon as I can get my  
>> Ajax stuff working okay.  have a dynamically generated form with a  
>> couple of listboxes and an anchor.  When the link is clicked I am  
>> expecting the values to get scraped from the controls and assigned  
>> to my model, but it doesn't seem to be happening.  The form is  
>> getting built and rendered correctly as far as I can tell.
>
> Okay, here is a complete tiny class that seems to exhibit the same  
> behavior.  The counter increments when the anchor is clicked, but  
> the value of selection is always nil.
>
> Any ideas?
>
> -Carl
>
> Smalltalk defineClass: #AsyncTest
> 	superclass: #{Seaside.WAComponent}
> 	indexedType: #none
> 	private: false
> 	instanceVariableNames: 'list selection counter '
> 	classInstanceVariableNames: ''
> 	imports: ''
> 	category: 'Run BASIC'!
>
> !AsyncTest class methodsFor: 'as yet unclassified'!
>
> canBeRoot
> 	^ true!
>
> initialize
> 	self registerAsApplication: 'asyncTest'.! !
>
> !AsyncTest methodsFor: 'rendering'!
>
> renderContentOn: html
> 	self renderOnHtml: html!
>
> rendererClass
> 	^Seaside.WARenderCanvas!
>
> renderOnHtml: html
> 	| select anchor |
> 	html
> 		text: 'Async test';
> 		break.
> 	(html form)
> 		id: 'testForm';
> 		with:
> 				[html
> 					text: 'Counter = ' , self counter asString;
> 					break.
> 				(html div)
> 					id: 'section';
> 					with:
> 							[select := html select.
> 							select list: self list.
> 							select on: #selection of: self.
> 							anchor := html anchor.
> 							anchor
> 								liveCallback:
> 										[:h |
> 										self counter: counter + 1.
> 										self renderOnHtml: h];
> 								submitFormNamed: 'testForm';
> 								text: 'test'.
> 							html break.
> 							html text: self selection]]! !
>
> !AsyncTest methodsFor: 'accessing'!
>
> counter
> 	counter isNil ifTrue: [ counter := 0 ].
> 	^counter!
>
> counter: anObject
> 	counter := anObject!
>
> list
> 	list isNil ifTrue: [ list := OrderedCollection with: '1' with:  
> 'one' with: 'won' with: 'Juan' ].
> 	^list!
>
> list: anObject
> 	list := anObject!
>
> selection
> 	^selection!
>
> selection: anObject
> 	selection := anObject! !
>
> #{AsyncTest} initialize!
>



More information about the seaside mailing list