[Seaside] Generating an callback URL for third-party use

Esteban A. Maringolo emaringolo at gmail.com
Wed May 28 14:40:30 UTC 2014


Just for the record, I'm sharing what I did..


>>#renderContentOn: html
...
html document addLoadScript: (self dataTableCreationScriptOn: html)
html document addLoadScript: (self tableClickHandler: html)



"Bind the datatable with the jsonResponse"
>>#dataTableCreationScriptOn: html


| actionUrl |
  actionUrl := html actionUrl withField: (html callbacks store:
(JSAjaxCallback on: [self jsonResponse])).
 ^((JSStream on: '$(''#' , tableId , ''')', '.dataTable({
        "ajax": "', actionUrl asString, '",
        "columns": [...]})') assignTo: 'datatable')

"Bind the row click with an ajax callback that sets the selected item in
the component and then performs a JQLoad based on the id passed through the
callback."
>>#tableClickHandler: html
^ (html jQuery: '#' , tableId , ' tbody')
on: 'click'
 selector: 'tr'
do:
(html jQuery ajax
 callback: [ :value | selectedItemId := value ] value: html jQuery this
text;
onSuccess: (self renderAjaxModalLoadOn: html) asFunction)


"Loads the new html, and then invokes the show of the modal."
>>#renderAjaxModalLoadOn: html
^ (html jQuery: '#' , self idModalContainer) load
 html: [ :ajaxHtml | self renderModalOn: ajaxHtml ];
onComplete: ((html jQuery: '#', self idModal) call: 'modal' with: 'show')
asFunction


I wish there was a way to simply call the JQLoad passing the argument as I
do with the callback:value:, that would save me one round-trip plus not
being dependant on the state.

Thank you!



Esteban A. Maringolo


2014-05-28 10:31 GMT-03:00 Esteban A. Maringolo <emaringolo at gmail.com>:

> Johan,
>
> 2014-05-28 3:12 GMT-03:00 Johan Brichau <johan at inceptive.be>:
> > Bob's answer is similar, but I prefer to explicitly use jQuery's
> on:selector:do: method.
> >
> > The full documentation is here: http://api.jquery.com/on/
> >
> > This way of working with delegated events is really necessary if you
> have hundreds of callbacks to attach. That never scales and your
> performance will be horrible (large response size, large seaside session,
> ...)
>
> Thanks for the advice. I looked into jQuery's docs and it's exactly
> what I was needing. In fact they use a dataTable as example.
>
> I added the handler this way:
>
> html document addLoadScript: ((html jQuery: '#', tableId, ' tbody')
>   on: 'click'
>   selector: 'tr'
>   do: (
>     html jQuery ajax
>       callback: [ :value | Transcript show: 'Clicked row: ', value; cr. ]
>       value: (html jQuery this text) ) asFunction)
>
> Now I need to transform that single ajax call into something more
> convoluted :)
>
> Thank you!
>
> Esteban A. Maringolo
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/seaside/attachments/20140528/f40445e5/attachment.htm


More information about the seaside mailing list