[Ur] calling javascript code in <dyn>

Simon Van Casteren simon.van.casteren at gmail.com
Thu Jul 5 09:43:14 EDT 2018


This is a very cool trick! I happened to need this: I'm making a filtering
page with a ton of checkboxes, and every time I check any one of them, I
want to reload stuff from the server. My first solution was to add my
"reloadStuff" function in every onchange handler of every checkbox. I've
now replaced that with the trick mentioned above: one dyn tag which depends
on the signals of every checkbox source, and it renders a script tag when
something changes. Much cleaner! Have to be a little bit careful that I
don't start abusing this though.

Side note: the <script> tag in basis can only be placed in the <head> part
of an html document, so if you want to apply this you'll need to use the JS
ffi to make a new "bodyscript" tag, as mentioned in the manual in chapter
11.3)

Op wo 4 jul. 2018 om 22:16 schreef Adam Chlipala <adamc at csail.mit.edu>:

> Let me try to disentangle the potential parts of your question.
>
> I hope you are not asking about literally writing code in JavaScript.  I
> will proceed as though you are actually asking about *client-side code*,
> but let me know if I misunderstood.  (It is a rather nice feature of Ur/Web
> that writing Ur/Web programs need not involve JavaScript at all, anymore
> than we talk about "transistors" when reading JavaScript code!)
>
> So, then, I conclude that your question is how to add a listener on a
> [source], to run arbitrary client-side code whenever the source changes.
> You seem to be on a good track there, with the mention of a dummy node.  I
> would create a <dyn> node that generates only a <script> node, whose 'code'
> handler will then be run whenever the source changes, such that this <dyn>
> node contributes no content to the page.
>
> On 07/04/2018 04:10 PM, Fabrice Leal wrote:
>
> is it possible to trigger javascript code when calling 'set s ...' ?
>
> as i understand the main usage seems to be regenerating html node trees; i
> think i could get away with generating some dummy html node with the
> javascript call in onload event, but I'm asking just to make sure I'm not
> missing anything.
>
> my goal is, for instance, to update some state on the client side and
> trigger a canvas redraw,
> since i seem to be unable to call '... <- signal s;' inside a 'transaction
> page'
>
>
> _______________________________________________
> Ur mailing list
> Ur at impredicative.com
> http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.impredicative.com/pipermail/ur/attachments/20180705/b1b2a194/attachment.html>


More information about the Ur mailing list