HtmlObject提供所有必需的功能来注册脚本和DOM事件的托管事件处理程序,但是如果您需要侦听的类不作为DOM元素存在,而是脚本变量(通过ScriptObject引用)存在,该怎么办?

最佳答案

javascript对象不支持附加事件的概念。但是,它可能支持持有对函数的引用的属性的概念,如果引用该属性,则会在特定点调用该函数。

我带你有这样的对象?

如果是这样,则可以使用ScriptObject SetProperty方法,该方法使用的属性名称应包含对函数的引用,并且Managed方法的委托(delegate)与Javascript对象将调用的签名匹配。

请注意,以下内容目前尚未经过测试,但应该使您走上正确的道路。

//Javascript in web page.
var myObj = new Thing();

function Thing()
{
     this.doStuff = function()
     {
         if (this.onstuff) this.onstuff("Hello World");
     }
}

// C# code in a Silverlight app.

class SomeClass
{
    private ScriptObject myObject;
    public SomeClass(ScriptObject theObject)
    {
         myObject = theObject;
         myObject.SetProperty("onstuff", (Action<string>)onstuff);
    }

    function void onstuff(string message)
    {
         //Do something with message
    }

}

关于javascript - 如何在Silverlight中附加到ScriptObject上的事件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/399572/

10-11 21:39