3

I'm struggling to understand how to use WebIO. From the documentation, this would be an example to send values to javascript:

using WebIO
s = Scope()
obs = Observable(s, "logme", "")
onjs(
    s, "logme",
    js"""
    function(newValue) {
        console.log(newValue);
    }
    """
)

Now, in order to test this, I run it in the REPL followed by

using Mux
WebIO.webio_serve(
    page("/", req -> s)
)

then point my browser (Brave) to localhost:8000 and open the console (via developer tools). At this point, I expect that running obs[] = "hi there" in the REPL would make that message show up in the console. But nothing happens. Why is my understanding of the expected behavior wrong? What should I do to make the javascript console log a message that I write to an observable on the julia side?

2 Answers 2

1

I guess there is an error in the documentation. The problem is that there are no listeners on the observable. I.e., julia> obs returns Observable{String} with 0 listeners. You can add a listener by WebIO.ensure_sync(s, "logme"), or you can write it like this:

using Mux, WebIO, JSExpr
s = Scope()
obs = Observable(s, "logme",  "")
onjs(obs,
     js"""
     function(newValue) {
        console.log(newValue);
     }
     """
     )
webio_serve(page("/", req -> s), 8000)
obs[] = "22"

Then the web console prints out the value 22.

Sign up to request clarification or add additional context in comments.

3 Comments

Thank you so much! Just to make it easier for casual readers: the difference is that we are passing the observable obs to onjs, instead of the scope and the observable's name.
Just discovered: one can also write s[:logme] instead of obs, which might be useful if a reference to the observable is not readily available.
Yes, I could have made it more clear. The information about the scope is already in the observable and onjs(obs, [...]) calls onjs(s, "logme", [...]), but it also calls the ensure_sync before.
0

Try this It will helps

WebIO.webio_serve( page("/", req -> s) )

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.