Ruby Forum IronRuby > ScriptableMember and Silverlight

Posted by Sean Clark Hess (Guest)
on 14.08.2008 21:01
(Received via mailing list)
Hello all,  I need some way to either access a javascript variable or 
expose
a function to javascript to be called later.  I've tried option #2, with 
the
following call, but I don't know how to specify a member function as
scriptable.  In C#, you use a meta-flag [ScriptableMember] above the
function.
HtmlPage.register_scriptable_object('mn', self)

What about the other approach?  I know you can access the dom, but I 
need to
access a plain old variable from javascript.

Thanks!
~sean
Posted by Jimmy Schementi (Guest)
on 14.08.2008 21:45
(Received via mailing list)
Hey Sean,

Yeah, I’m well aware of the issue with not being able to use 
[ScriptableMember] for IronRuby. =(

1. Access Javascript variable from Ruby:

If in your HTML you have some variable:
<script type=”text/javascript”>
  var jsVar = “Hello from Javascript”
</script>

Then in your Ruby script you can access it:

Include System::Windows::Browser
HtmlPage.window.eval “jsVar”

2.  Access Ruby function from Javascript

This is not directly possible because of not having attribute support. 
Curt might have more input into whether this will be fixed in the 
future.

However, if you’re not opposed to hacky solutions, attach Ruby to a JS 
event (HtmlElement#attach_event), and when you want data from Ruby fire 
the JS event and Ruby could write the data to the DOM (a hidden div, 
perhaps?). Ugh, that sucks, but it’s what we’ve got today.

I’d suggest trying the first option, and we’ll keep you posted on making 
Ruby objects scriptable from JS.

~js


On 8/14/08 11:59 AM, "Sean Clark Hess" <seanhess@gmail.com> wrote:

Hello all,  I need some way to either access a javascript variable or 
expose a function to javascript to be called later.  I've tried option 
#2, with the following call, but I don't know how to specify a member 
function as scriptable.  In C#, you use a meta-flag [ScriptableMember] 
above the function.

HtmlPage.register_scriptable_object('mn', self)

What about the other approach?  I know you can access the dom, but I 
need to access a plain old variable from javascript.

Thanks!
~sean
Posted by Sean Clark Hess (Guest)
on 14.08.2008 22:00
(Received via mailing list)
Sweet... I just figured out how to call a js function from ruby, and in
fact, that works better for what I want to do anyway.
Thanks!


On Thu, Aug 14, 2008 at 1:44 PM, Jimmy Schementi <
Posted by Curt Hagenlocher (Guest)
on 14.08.2008 22:03
(Received via mailing list)
I don't know about the word "fixed" :). But attribute support is 
definitely one of the .NET interop scenarios on my radar.

From: ironruby-core-bounces@rubyforge.org 
[mailto:ironruby-core-bounces@rubyforge.org] On Behalf Of Jimmy 
Schementi
Sent: Thursday, August 14, 2008 12:45 PM
To: ironruby-core@rubyforge.org
Subject: Re: [Ironruby-core] ScriptableMember and Silverlight

Hey Sean,

Yeah, I'm well aware of the issue with not being able to use 
[ScriptableMember] for IronRuby. =(

1. Access Javascript variable from Ruby:

If in your HTML you have some variable:
<script type="text/javascript">
  var jsVar = "Hello from Javascript"
</script>

Then in your Ruby script you can access it:

Include System::Windows::Browser
HtmlPage.window.eval "jsVar"

2.  Access Ruby function from Javascript

This is not directly possible because of not having attribute support. 
Curt might have more input into whether this will be fixed in the 
future.

However, if you're not opposed to hacky solutions, attach Ruby to a JS 
event (HtmlElement#attach_event), and when you want data from Ruby fire 
the JS event and Ruby could write the data to the DOM (a hidden div, 
perhaps?). Ugh, that sucks, but it's what we've got today.

I'd suggest trying the first option, and we'll keep you posted on making 
Ruby objects scriptable from JS.

~js


On 8/14/08 11:59 AM, "Sean Clark Hess" <seanhess@gmail.com> wrote:
Hello all,  I need some way to either access a javascript variable or 
expose a function to javascript to be called later.  I've tried option 
#2, with the following call, but I don't know how to specify a member 
function as scriptable.  In C#, you use a meta-flag [ScriptableMember] 
above the function.

HtmlPage.register_scriptable_object('mn', self)

What about the other approach?  I know you can access the dom, but I 
need to access a plain old variable from javascript.

Thanks!
~sean