[Seaside] Rendering Callbacks during an Ajax callback

jtuchel at objektfabrik.de jtuchel at objektfabrik.de
Fri Feb 10 16:26:12 UTC 2017


Dear Seasiders,

I must bee overlooking something obvious.

I want to redraw a listItem in and unorderedList (it is a boostrap 
.list-item .row, but that doesn't really matter) in an Ajax callback.
This listItem contains normal anchors with callbacks.

The ajax call is initiated in a javascript function, not rendered by 
Seaside. This call to ajax does the following;


$.ajax( ... ).done(function(result) {
         row.replaceWith(result);});


where row is a jquery that contains the listItem. The rerendering works 
very well and all seems good.

Except for one little detail: the callbacks rendered in the AJax 
callback are re-numbered from 1 and once you click on oneof the 
re-rendered link it is a nice surprise what method might get called on 
the server. I guess I am messing with the _s and _k parameters in my 
caööback method.

So here is my callback method which answers the re-rendered listItem/row:


changeSomeStuffOnTheServerAndRedraw     | rahmenElementId fields req betrag planElement conv wrapper ctx 
contKey row resp |        ctx := self requestContext.        req := ctx 
request.        resp := ctx response.        fields := req fields.      
   "Some boring business stuff which works like a charm, including 
finding the right business objects, changing them, commits in Glorp and 
whatnot"

         "Re-render the row"

         row := self findTheListItemComponentForRerendering.        
resp            status: 200;            contentType: (WAMimeType 
textHtml charset: ctx handler charSet);            nextPutAll: (        
         (self rendererClass builder)"**->"              actionUrl: (ctx 
session actionUrlForKey: contKey);   "I also tried leaving this out --> 
even worse"                    fullDocument: false;                    
render: [:html |                        html render: row ])

I think the problem is either the fact that I shouldn't be using the 
requestContext of the Ajax callback, or the actionUrl: part is wrong.
The rows not re-rendered still work like a charm.


You can see in the attached picture that both a not-re-rendered row and 
the re-rendered row point to the same 's anchors point to the same url 
with identical _s and _k parameters, but thesecond one is the 
re-rendered and its callback number is 1 instead of 51, which it had 
before re-rendering:



If I use the URL and replace the 1 with 51, The correct callback is 
being called, the initial callback is still registered.
I wouldn't mind if the re-render registered another Callback, even if 
that means I waste memory, but it seems I am registering the new 
callbacks in some registry that's new for the ajax callback.... (I am 
confused)

Any hints? Ideas? How can I make sure the anchors in that redrawn 
listItem find their callback blocks on the server?


Thank you in advance

Joachim






-- 
-----------------------------------------------------------------------
Objektfabrik Joachim Tuchel          mailto:jtuchel at objektfabrik.de
Fliederweg 1                         http://www.objektfabrik.de
D-71640 Ludwigsburg                  http://joachimtuchel.wordpress.com
Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/seaside/attachments/20170210/d3956374/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ifioakbcdojcdbmm.png
Type: image/png
Size: 229689 bytes
Desc: not available
URL: <http://lists.squeakfoundation.org/pipermail/seaside/attachments/20170210/d3956374/attachment-0001.png>


More information about the seaside mailing list