[Seaside] Seaside + Scriptaculous: Question on SUAjax onLoad, onComplete, etc.

Leandro Pérez lperez at lifia.info.unlp.edu.ar
Wed Jun 27 19:10:10 UTC 2007


First of all, thanks a lot Lukas and Niklaus!!!

Niklaus Lutz wrote:
> 
> hy
> 
> Maybe I've done something similar some time ago: After a file-upload,
> the file had to be processed, that took up to several minutes....
> 
> My Solution:
> In the callback of the upload button i forked a new thread that
> processed the file:
> 
> #import
>  [
> self threadRunning: true.
>   self processFile.
> self threadRunning: false.
> ]   forkAt: Processor userBackgroundPriority named: 'Monitor import'
> 
> 
> Render some information (duration) while the import is running, during
> this time poll to see if the thread has finished:
> 
> #renderProgressBarOn: html
> 	html div
> 		id: 'divProgressbar';
> 		with: [
> 			html text: #pleaseWaitTillImportHasFinished translate ] .
> 				
> #renderValidationOn: html
> 	self renderProgressBarOn: html.
> 	html div
> 		script: (
>                     html periodical
> 			evalScripts: true;
> 			frequency: 1;
> 			callback: [ :r |
> 				self isThreadRunning:
> 					ifFalse: [
> 						r script:'updater.stop();$('divProgressbar'').setStyle({display:
> ''none''});'.
> 						super  renderValidationOn: r ]
> 					ifTrue: [
> 						r render: self elapsedTime duration ]];
> 			assignTo: 'updater');
> 		with: [ ].
> 
> 
> so instead of hiding the progress-bar, you could do another
> full-request....
> 
> 
I did basically what you say here, besides I used a high decay as stated in
a post by Ramon Leon on Ajax Live Updates and other..

http://www.nabble.com/Ajax-live-updates-tf1922480.html#a5263907
http://www.nabble.com/Displaying-progress-on-a-web-page-tf2115321.html#a5853986

It is working fine, but another problem came up now, it is something i
simply don't understand. Please 
Look at the code below, at the part "LOOK HERE PLEASE!!!"


MyComponent>>renderContentOn:html
html div id:'div' with:'some content'.
(html submitButton)
	onClick: (html evaluator callback: [:script | 
		[(Delay forSeconds:10)"Simulate long running process".
		self setWorkFinished] fork
		self update: 'div'
		whenTrue: [self isWorkFinished]
		rendering: [:h |  h submitButton  "this works fine" 
                                      "h checkbox....when doing this, poll
doesn't stop"]"LOOK HERE PLEASE!!!"
		on: script]);
	text: 'Spin'.


MyComponent>>update: elementId whenTrue: aBlock rendering: renderBlock on:
script 
	(script element)
	id: elementId;
	render:[:r | r div 
		     with: [:h | renderBlock value: h]
		     waitForCondition: aBlock
		     thenRender: [:h  | renderBlock value: h]]
	
WATagBrush >> with: initialRenderBlock waitForCondition: aBlock thenRender:
aRenderBlock 
	self
	    script: ((canvas periodical)
		  id: (self attributes at: #id);
		  decay: 1000;
		  asynchronous: true;
		  evalScripts: true;
		  frequency: 1 seconds;
		  callback: 
			[:r | 
			aBlock value 
			    ifFalse:[initialRenderBlock value: r.
				     r hiddenInput text: r nextId    "This is to keep decay
low...generates different responses"]
			    ifTrue: [aRenderBlock value: r]]);
	    with: initialRenderBlock



If in the line "LOOK HERE PLEASE!!!" I render an anchor, simple text, a
submit button, a textInput etc.. it works just fine and nothing weird
happens, but If I try to render a checkbox, a non-stopping poll mechanism
starts and I end up with a post every 1 second. 
It is weird because it only happens when I render a checkbox



any ideas????
-- 
View this message in context: http://www.nabble.com/Seaside-%2B-Scriptaculous%3A-Question-on-SUAjax-onLoad%2C-onComplete%2C-etc.-tf3984652.html#a11330698
Sent from the Squeak - Seaside mailing list archive at Nabble.com.



More information about the Seaside mailing list