[Seaside] Checkbox and AJAX?

Bob Arning arning315 at comcast.net
Tue Jul 8 16:28:19 UTC 2014


I'm not sure what precise goal is here, but this seems to select the row 
when the checkbox is clicked. What else was required?

testRender1: html

     | isSel someData selections setSel ss |

     selections _ Set new.
     someData _ #('hello' 'goodbye' 'what?').
     isSel _ [ :obj | selections includes: obj].
     setSel _ [ :obj :val | val ifTrue: [selections add: obj] ifFalse: 
[selections remove: obj]].
     html table with: [
         someData do: [ :e |
             html tableRow with: [
                 html tableData: e.
                 html tableData: e sorted.
                 html tableData with: [
                     html form: [
                         html label:[
                             ss _ (html jQuery this closest: 'tr') 
addClass: 'selectedRow'.
                             html checkbox
                                 onClick: (html jQuery ajax 
serializeThisWithHidden);
                                 onClick:  (ss);
                                 value: (isSel value: e);
                                 callback: [ :value | setSel value: e 
value: value ]
                         ]
                     ].
                 ].
             ].
         ].
     ].



On 7/8/14 9:06 AM, Mariano Martinez Peck wrote:
>
>
>
> On Mon, Jul 7, 2014 at 6:02 PM, Johan Brichau <johan at inceptive.be 
> <mailto:johan at inceptive.be>> wrote:
>
>     Hi Mariano,
>
>     Unfortunately, the trick with capturing 'this' for later use is
>     not going to work. The generated script (or the onSuccess
>     callback) are not executed in the same scope as where you defined
>     'myself'.
>
>
> Ok, I imagined that something like that could happen.
>
>     I made that mistake in this thread earlier on, but I was just not
>     thinking right. Sorry about that.
>
>
> Np, it was a good try to avoid having an id for every row ;)
>
>     The problem with the apply: is that the apply statement is added
>     inside the function. I noticed that problem with JSFunction
>     objects before but I don't know yet if it can be solved. It does
>     act counter-intuitive though.
>
>
> Indeed.
>
>     Working with an id per row is the easiest solution here, I think.
>
>
> OK, perfect.
>
> Thank you very much guys,
>
>     Johan
>
>     On 07 Jul 2014, at 15:42, Mariano Martinez Peck
>     <marianopeck at gmail.com <mailto:marianopeck at gmail.com>> wrote:
>
>     > Thank you all for the explanations. I do get it now. Now that I
>     made the simplest case to work (adding an id per tr), I would like
>     to make the Johan solution (finding the closest tr). I tried:
>     >
>     >       html form: [
>     >               html label:[
>     >                       html checkbox
>     >                                onClick:  (((JSStream on: 'var
>     myself = this'),
>     > (html jQuery ajax
>     >       serializeThisWithHidden;
>     >       script: [ :s | s << (((s jQuery expression:(JSStream on:
>     'myself')) closest: 'tr') addClass: 'selectedRow') ])) asFunction
>     apply: #());
>     >                               value: (self isSelected: anObject);
>     >                               callback: [ :value | self
>     selectRow: anObject value: value ]]]
>     >
>     > But I get: SyntaxError: function statement requires a name
>     >
>     >
>     > The onClick is being generated like this:
>     >
>     > a JSFunction (function(){var myself =
>     this;$.ajax({"url":"/reps","data":["_s=nHl8jzTmLkMbcOME","_k=2IH4kmR1ds-rEaua","accessMenu=Clients","activityMenu=Clients","65",$(this).next("input:hidden").andSelf().serialize()].join("&"),"dataType":"script"})}())
>     >
>     > Note that if I put a halt in #script, it doesn't even get call.
>     >
>     > I removed the asFunction apply:   letting only something like this:
>     >
>     >  onClick:  (((JSStream on: 'var myself = this'),
>     >                 (html jQuery ajax
>     > serializeThisWithHidden;
>     >                           script: [ :s |  self halt. s << (((s
>     jQuery expression:(JSStream on: 'myself')) closest: 'tr')
>     addClass: 'selectedRow') ])) );
>     >
>     > This solved that problem, but my row doesn't get the css class
>     yet. The #script: does halts, and generates a script like this one:
>     >
>     > a JSScript ($(myself).closest("tr").addClass("selectedRow"))
>     >
>     > Any ideas?
>     >
>     > Thanks in advance,
>     >
>     >
>     >
>     >
>     >
>     > On Sun, Jul 6, 2014 at 9:14 AM, Johan Brichau
>     <johan at inceptive.be <mailto:johan at inceptive.be>> wrote:
>     > Hi,
>     >
>     > Both in the context of the #script: ajax callback-to-smalltalk
>     and the ajax #onSuccess: javascript-callback option, the
>     javascript's this variable will not hold anything related to the DOM.
>     >
>     > The difference between #script: and #onSuccess: is that the
>     former defines a script rendering callback to be executed in
>     Seaside and the latter is a jQuery ajax option to define a
>     javascript callback (to be executed client-side) when the ajax
>     call finishes successfully.
>     >
>     > The onSuccess parameter will accept both a string or a JSScript
>     instance as a Javascript to be executed
>     > In a #script callback, the block argument is a JSScript instance
>     already. The script concatenation operator '<<' expects another
>     JSScript instance (e.g. a JSStream instance). If you concatenate a
>     Smalltalk string with a JSScript instance, the Smalltalk string is
>     serialized as a Javascript string on the JSScript instance.
>     >
>     > cheers
>     > Johan
>     >
>     > On 06 Jul 2014, at 01:06, carlo.t <snoobabk at yahoo.ie
>     <mailto:snoobabk at yahoo.ie>> wrote:
>     >
>     > > Hi
>     > >
>     > > I thick #script: does not work because this is a separate ajax
>     call where
>     > > the reference to 'this' is not known and is not the row you
>     expect.
>     > > #script would work if you reference a valid DOM id for the row
>     e.g.
>     > >                                       html checkbox
>     > >   onClick: (html jQuery ajax serializeThisWithHidden;
>     > >                   script: [:s | s
>     > >                                   << (s jQuery: #idForRow)
>     addClass: 'selectedRow']);
>     > >
>     > > #onSuccess is probably triggering a callback where the
>     reference to 'this'
>     > > is valid and so the following line will work:
>     > >       (html jQuery this closest: 'tr') addClass: 'selectedRow'
>     > >
>     > > I'm a javascript newbie too but thats what I think is going on.
>     > >
>     > > Cheers
>     > > Carlo
>     > >
>     > >
>     > >
>     > >
>     > > --
>     > > View this message in context:
>     http://forum.world.st/Checkbox-and-AJAX-tp4731692p4766717.html
>     > > Sent from the Seaside General mailing list archive at Nabble.com.
>     > > _______________________________________________
>     > > seaside mailing list
>     > > seaside at lists.squeakfoundation.org
>     <mailto:seaside at lists.squeakfoundation.org>
>     > > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>     >
>     > _______________________________________________
>     > seaside mailing list
>     > seaside at lists.squeakfoundation.org
>     <mailto:seaside at lists.squeakfoundation.org>
>     > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>     >
>     >
>     >
>     > --
>     > Mariano
>     > http://marianopeck.wordpress.com
>     > _______________________________________________
>     > seaside mailing list
>     > seaside at lists.squeakfoundation.org
>     <mailto:seaside at lists.squeakfoundation.org>
>     > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
>     _______________________________________________
>     seaside mailing list
>     seaside at lists.squeakfoundation.org
>     <mailto:seaside at lists.squeakfoundation.org>
>     http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
>
>
>
> -- 
> Mariano
> http://marianopeck.wordpress.com
>
>
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/seaside/attachments/20140708/c19a1bf2/attachment-0001.htm


More information about the seaside mailing list