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

Johan Brichau johan at inceptive.be
Wed Oct 14 11:40:31 UTC 2015


Hi Chris,

You are right, I was looking at the wrong places and responded too quickly.

> It seems like if the replaceWith: were implemented as:
> 
>     self call 'replaceWith' with: aRenderable
> 
> then maybe they could support all the argument variations specified at
> api.jquery.com, and not only the String variations.

True, but that will break the most common use of those methods: passing in a Smalltalk block or a Seaside component (i.e. any Renderable).

Somehow, your use case has never popped up before, but it’s interesting to see if we could make that work.
The JSObject>>render:on: is used when the script is actually rendered in the html, so it seems difficult to change it there.

Instead of ommitting the call to #render: from #replaceWith:, I’m guessing a different method needs to be introduced which renders any renderable but does nothing with a JSObject.
We can try...

> And, indeed, the *vast majority* of senders of call:with: simply pass
> the argument directly, thus truly providing merely the syntactic sugar
> and nothing more..  But, for some reason, #after:, #append:, #before:,
> #html:, #prepend:, #replaceWith:, #wrap:, #wrapAll:, #wrapInner: all
> have that (self render: aRenderable) which forces the String arg...


If I understand what you are trying to do in the example snippets, the typical way we would write this in the Seaside binding is like this:

(html jQuery id: buttonId) onClick: (html jQuery ajax script: [:s | s << ((s jQuery id: replacementId) replaceWith: resultWidget) ])

cheers
Johan


More information about the seaside mailing list