我的 Silverlight 控件中有以下 (2) 个“ScriptableMember”类型:
<ScriptableMember()>
Public Property MType As MyCustomType
<ScriptableMember()>
Public Property Message As String
这里的目的显然是允许通过 JavaScript 中的 HTML 桥进行暴露。调用“Message”属性很简单,并且工作原理如下:
var SLControl = document.getElementById("SilverlightControl");
SLControl.Content.MyRegisteredControl.Message = 'Hello';
但是,我在通过深入了解 JS 中的属性来设置实例属性的值时遇到问题。我认为代码应该如下:
SLControl.Content.MyRegisteredControl.MType.Name = 'John';
请注意我如何添加“MType”,然后访问其名为“Name”的公共(public)属性之一。 MyCustomType 类具有所需的所有适当的“ScriptableMember”属性。
但是,当运行上面的行时,我收到以下错误:
“Microsoft JScript 运行时错误:对象不支持此属性或方法”
它在“消息”的分配上工作得很好。 JS 中是否可以深入查看实例属性并分配其变量?如果是这样,我的 JS 是否不正确,或者我需要做什么来解决这个问题。谢谢!
最佳答案
好吧,我在这个问题上没有得到任何帮助,但我想通了,答案是"is"。
第一,我的 Silverlight 控件上有一个实例属性,如下所示:
<ScriptableMember()>
Private _MyClass1 As New MyCustomClass
Public Property MyClass1() As MyCustomClass
Get
Return _MyClass1
End Get
Set(ByVal value As MyCustomClass)
_MyClass1= value
End Set
End Property
根据 HTML 桥的要求,注册我的控件的类实例的实例,以便我可以从 JavaScript 获取访问权限:
HtmlPage.RegisterScriptableObject("MySLControl", Me)
现在我认为我需要为实例属性注册上面的另一个成员,但我不需要这样做。您可以通过作为可编写脚本的成员公开的主类实例深入了解它,如下所示:
//Get instance of the Silverlight File Upload Control
var SLControl = document.getElementById("SilverlightControl");
if (SLControl != null)
//Drill down through the instance property exposed on the Silverlight control
SLControl.Content.MySLControl.MyClass1.Name = "John Smith";
让我失望的是我认为我需要为实例属性注册一个可编写脚本类型的实例,但我不需要这样做。我可以深入查看并访问该属性。
以下帖子对此进行了更多扩展:
<强> Accessing Instance Properties in Silverlight from JavaScript
关于javascript - 我可以在 Silverlight 中的可编写脚本的成员属性上设置 Javascript 实例属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9263350/