[Seaside] how to render access to a JS argument variable?

Chris Muller asqueaker at gmail.com
Fri Oct 9 22:14:53 UTC 2015


Wow, all I need to do is work up an email question, and it seems to lead
myself to a solution!   :-)   In this case, I can't
use JQueryInstance>>#replaceWith: only lets the user pass a String
argument, not a jQuery argument.  Because the version of JSObject>>#render:
always returns a String no matter what, which will never let a JSObject
subclass render its code onto the stream.  Strange!

And, so, the solution was to #call: 'replaceWith' with: myJQPost myself.
Here is the code, for comparison to the original:

     html script defer with:
          ((html jQuery id: buttonId) onClick:
               ((html jQuery id: replacementId) call: 'replaceWith' with:
ajaxRequest) asFunction).

I think this is slowing my learning of Seaside -- the thought that I should
be able to use all the convenience methods and get all the power of JQuery,
but, in fact, some of these methods provide no way to render the other
versions of the jQuery calls which take different argument types.  Only the
string types are supported.  Am I right about this?

Another example is the "data" argument of a $.ajax(...) request.  Seaside
renders a Javascript array, but then calls .join("&") on it!  Strings
only....  :(


On Fri, Oct 9, 2015 at 4:52 PM, Chris Muller <asqueaker at gmail.com> wrote:

> Thanks Johan, that's the kind of advice I need, as there are many ways to
> do things.
>
> Now, I am stumped (for hours!) on another very similar problem, except
> instead of a single variable, I simply want to pass an argument of type
> "jQuery" into jQuery's replaceWith() function, called within a onClick
> handler method.  So, in my renderContentOn:, I wrote:
>
>      | ajaxRequest |
>      ajaxRequest := (html jQuery post
>           url: html actionUrl;
>           dataType: 'html') html: [  : replaceHtml | self invoke.
>  replaceHtml render: resultWidget ].
>            ....
>      html script defer with:
>           ((html jQuery id: buttonId) onClick:
>                ((html jQuery id: replacementId) replaceWith: ajaxRequest
> asJavascript) asFunction).
>
> However, as before, the argument to replaceWith() is being rendered as a
> Javascript string literal instead of the code itself.  (See red quotes,
> below, I want it to stop rendering those quotes!).
>
>     $("#id3").click(function(){$("#id4").replaceWith(*"*
> $.post(&quot;/puf&quot;,[&quot;_s=C8vA8l5UNoUsGTpf&quot;,&quot;_k=B_Wk6EYdovACqAgV&quot;,&quot;2&quot;].join(&quot;&amp;&quot;),&quot;html&quot;)
> *"*)})
>
> I tried many different variations, no success.  This must be something
> simple...
>
> Thank you.
>
> On Fri, Oct 9, 2015 at 2:25 AM, Johan Brichau <johan at inceptive.be> wrote:
>
>> Hi Chris,
>>
>> I notice you figured out the use of #alias:
>>
>> Use the JS generation facilities only when you need to *generate* code.
>> For example, to embed a server-side callback or, in general, when the code
>> can only be dynamically constructed.
>> In your case, I would do the following:
>>
>> (JSStream on: ‘console.log(event)’)
>>
>> Just because you can write it in Smalltalk does not mean you should :)
>>
>> Johan
>>
>> ps: your contributions are in my inbox, I will process them asap
>>
>> > On 09 Oct 2015, at 03:46, Chris Muller <asqueaker at gmail.com> wrote:
>> >
>> > Found something.  JSAlias.
>> >
>> >>    html span
>> >>         class: 'PufMessageWidget' ;
>> >>         id: (self assureHtmlIdUsing: html) ;
>> >>         onClick: ((html javascript logger call: 'log' with: 'event')
>> >> asFunction: #('event')).
>> >
>> > I gave up on onClick: since I guess its better to set up event
>> > bindings through jQuery's API.  This binding does what I want, no
>> > syntax error.
>> >
>> >     html script defer with:
>> >          ((html jQuery id: (self assureHtmlIdUsing: html)) onClick:
>> >               ((html javascript logger call: 'log' with: (html
>> > javascript alias: 'event')) asFunction: #('event'))).
>> >
>> > It seems like a pretty wordy way to write console.log(event), but the
>> > intent reads clearly so, that's good..
>> > _______________________________________________
>> > 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
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/seaside/attachments/20151009/00403652/attachment.htm


More information about the seaside mailing list