ClearsSript V8ScriptEngine TypeError: form.Show is not a function
ClearsSript V8ScriptEngine TypeError: form.Show is not a function
我对系统中的某些动态部分使用 MS ClearScript library。我有一些已经在 .NET(C#) 代码中创建的对象列表,这些对象用作函数使用的描述。像这样 (Javascript):
var form = MetaData.GetClass('MyFormClassName', 'FormId'); form.Show();
在此示例中,使用静态方法 MetaData.GetClass
获取 ID FormId
的 class MyFormClassName
。 returns ID FormId
的 MyFormClassName
实例的方法创建了 in.NET(C#) 代码。有一种方法 Show()
在实例中显示带有参数的 windows 形式。
但是当我调用 Show()
方法时出现错误:
form.Show is not a function
引擎包含一个对象Properties
,但没有方法。引擎不知道对象 Type
。当我将 AddHostObject
与名称 form
一起使用时,它工作正常,但我不知道将来会使用什么变量名。
有人知道如何在 V8ScriptEngine 中使用 .NET (C#) 对象方法吗?是否可以不每次都注册宿主对象以供对象方法使用?
最有可能的问题是 MetaData.GetClass
return 值类型是基础 class 或没有 Show
方法的接口。
如果正确,则 Show
由 returned 对象的实际类型提供,并且需要 downcasting 才能调用它。
有几种方法可以解决这个问题:
- 在JavaScript中使用
HostFunctions.cast
or HostFunctions.asType
进行向下转换。
- 将属性
ScriptMember(ScriptMemberFlags.ExposeRuntimeType)
添加到您的 MetaData.GetClass
实现中。
- 将
ScriptEngine.DisableTypeRestriction
设置为 true
(不推荐)。
我对系统中的某些动态部分使用 MS ClearScript library。我有一些已经在 .NET(C#) 代码中创建的对象列表,这些对象用作函数使用的描述。像这样 (Javascript):
var form = MetaData.GetClass('MyFormClassName', 'FormId'); form.Show();
在此示例中,使用静态方法 MetaData.GetClass
获取 ID FormId
的 class MyFormClassName
。 returns ID FormId
的 MyFormClassName
实例的方法创建了 in.NET(C#) 代码。有一种方法 Show()
在实例中显示带有参数的 windows 形式。
但是当我调用 Show()
方法时出现错误:
form.Show is not a function
引擎包含一个对象Properties
,但没有方法。引擎不知道对象 Type
。当我将 AddHostObject
与名称 form
一起使用时,它工作正常,但我不知道将来会使用什么变量名。
有人知道如何在 V8ScriptEngine 中使用 .NET (C#) 对象方法吗?是否可以不每次都注册宿主对象以供对象方法使用?
最有可能的问题是 MetaData.GetClass
return 值类型是基础 class 或没有 Show
方法的接口。
如果正确,则 Show
由 returned 对象的实际类型提供,并且需要 downcasting 才能调用它。
有几种方法可以解决这个问题:
- 在JavaScript中使用
HostFunctions.cast
orHostFunctions.asType
进行向下转换。 - 将属性
ScriptMember(ScriptMemberFlags.ExposeRuntimeType)
添加到您的MetaData.GetClass
实现中。 - 将
ScriptEngine.DisableTypeRestriction
设置为true
(不推荐)。