[Seaside] Re: a problem using javascript goto and jquery and some complex stuff

Esteban Lorenzano estebanlm at gmail.com
Wed Nov 3 21:07:57 UTC 2010


Cool, seems to be working this way. Thank you very much!

Cheers,
Esteban

On 2010-11-03 16:16:01 -0300, Johan Brichau <johan at inceptive.be> said:

> Hi Esteban,
> 
> For the dialog box, I think this corresponds to what you outline:
> 
> 	| dialogId |
> 	dialogId := html nextId. 	
>         self canvas div id: dialogId.
> 	self canvas script: (html jQuery new dialog 		
> 		id: dialogId;
> 		html: someComponent;
> 		title: 'Title;
> 		width: 600;
> 		addButton: 'Accept' do:
> 			(html jQuery ajax
> 					callback: [ "This is fake code,
> but shows what I need :)"
> 							self
> doSomethingLikeRemoveARow.
> 							self
> refreshReport ];
> 					onComplete: (html javascript
> refresh));
> 		addButton: 'Cancel' do: (html jQuery id: dialogId)
> close;
> 		resizable: false;
> 		modal: true
> 		autoOpen: true).
> 
> 
> The accept button will execute an ajax callback that triggers a page
> refresh on completion.
> The cancel button will simply remove the dialog from the page.
> 
> Now, if you want to decide server-side on what kind of behavior to
> execute on the client-side, you can pass this to the button:
> 
> (html jQuery ajax script: [:s | self closeDialog
> 							ifTrue:[ s << (s
> jQuery id: dialogId) close]
> 							ifFalse: [s <<
> (s refresh)]]
> 
> It's also useful to note that you can easily pass the link to a full
> callback in a javascript like this:
> 
> html javascript callback: [ self show: aComponent]
> 
> Does this help?
> 
> Cheers
> Johan
> 
> On 03 Nov 2010, at 13:04, Esteban Lorenzano wrote:
> 
>> Hi,
>> What I really want is to force a page refresh, but decide when this is
> necesary inside a javascript callback. For example, I open a "confirm
> dialog"... y you cancel the operation, nothing happens, but if you
> agree, a new page is rendered (not an ajax part, a whole new page), this
> is more or less the behavior I'm needing (something like the large
> example below).
>> btw... I tryed using "html jQuery ajax" instead "html jQuery get" (and
> in fact I also tested with "post"), with exactly the same result for
> this issue.
>> 
>> Cheers,
>> Esteban
>> 
>> On 2010-11-03 03:54:17 -0300, Johan Brichau <johan at inceptive.be> said:
>> 
>>> Hi Esteban,
>>> The goto makes your browser navigate to the url of an ajax callback.
>>> That will execute the callback server-side but the response of that
>>> callback is empty, hence the blank page. I think the use of #call:
> will
>>> trigger a redirect in the callback, hence why that is working (just
>>> writing this of the top of my head, did not verify). You either need
> to
>>> use normal callbacks, or use jQuery to add or replace the html inline
> on
>>> your webpage. Something along the lines of:
>>> html anchor 		
>>> 		onClick: (html jQuery ajax
>>> 						callback:[self
>>> doSomethingLikeRemoveARow];
>>> 						onComplete:(html jQuery
>>> ajax) script:[:s | s << ((s jQuery expression: 'body') append: [:r |
>>> tabsComponent renderOn: r])  ]);
>>> 		with: 'goto blah'.
>>> -or-
>>> html anchor 		
>>> 		callback: [self doSomethingLikeRemoveARow. self show:
>>> tabsComponent ];
>>> 		with: 'goto blah'.
>>> In the first case, it's important that you cancel the default
> behavior
>>> of the anchor because otherwise it will execute a full callback
> instead
>>> of an ajax request only. I'm always sending 'url: 'javascript:{}' to
>>> such an anchor to cancel the default generated Seaside url, but there
>>> are other ways.
>>> Hope it helps
>>> Johan
>>> On 03 Nov 2010, at 01:09, Esteban Lorenzano wrote:
>>>> Hi,
>>>> I have a problem dealing with some ajax renderization... I have
>>> something like this:
>>>> 	html anchor 		onClick: (html javascript 			
> 
>>> goto: (html jQuery get 				callback: [ self
> show:
>>> tabsComponent ];
>>>> 				fullUrl));
>>>> 		with: 'goto blah'.
>>>> of course, this is not my real need, just a simplified version :)
>>>> and whenever the callback is executed, it just renders a blank
> page...
>>> but if I change the #show: for #call:, the new component is rendered
>>> correctly... I think this is not correct, because same behavior is
>>> happening in other contexts (for example, I want to execute a
> callback
>>> after render a confirmation dialog, something like this:
>>>> 	| dialogId |
>>>> 	dialogId := html nextId. 	self canvas div id: dialogId.
>>>> 	self canvas script: (html jQuery new dialog 		id:
>>> dialogId;
>>>> 		html: someComponent;
>>>> 		title: 'Title;
>>>> 		width: 600;
>>>> 		addButton: 'Accept' do: (html javascript
>>>> 			goto: (html jQuery get
>>>> 				callback: [
>>>> 					"This is fake code, but shows
>>> what I need :)"
>>>> 					self doSomethingLikeRemoveARow.
>>>> 					self refreshReport ];
>>>> 				fullUrl));
>>>> 		addButton: 'Cancel' do: html jQuery new dialog close;
>>>> 		resizable: false;
>>>> 		modal: true
>>>> 		autoOpen: true).
>>>> again, this is a simplified version of something I do for reef, but
> it
>>> shows more or less what I want... and I get a blank page all the
> time...
>>>> Any idea how to solve this?
>>>> Cheers,
>>>> Esteban
>>>> _______________________________________________
>>>> 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