为了提高Blazor JS Interop调用的性能,提供了同步和解组API
我很难找到更多关于被拆散者的信息。
例如:
//javascript
JSFunctions.f1 = function (fields) {
var f1 = Blazor.platform.readStringField(fields, 0);
var f2 = Blazor.platform.readStringField(fields, 4);
var f3 = Blazor.platform.readStringField(fields, 8);
};
//F#
[<Inject>]
member val Js: IJSRuntime
let js = this.Js :?> IJSUnmarshalledRuntime
js.InvokeUnmarshalled<ElementReference, string, unit>("JSFunctions.f1", er, txt)
- 函数Blazor.platform.*在哪里定义
- 应该使用哪一个来检索ElementReference类型的参数
- 函数readStringField的第二个int参数是什么?应该如何使用它
Blazor
对象是全局命名空间(window
(中的JavaScript对象,由Blazor WebAssembly中的blazor.webassembly.js
或Blazor Server中的blazor.server.js
添加。它通过以下脚本添加到index.html(或_Host.cs.html(末尾的Blazor应用程序的默认模板:
<script autostart="false" src="_framework/blazor.webassembly.js"></script>
Blazor
对象提供了Blazor.platform
和一些有用的api,例如用于手动启动Blazor的start()
。此脚本还将另一个名为BINDING
的对象添加到全局命名空间(window.BINDING
或简称为BINDING
(。它们提供了直接从JavaScript以解组方式处理.NET对象的方法。例如,您可以使用读取不同类型的数据
Blazor.platform.read....
您可以使用读取类似ElementReference
类型对象的对象
Blazor.platform.readObjectField(fields,index)
这里的字段是在调用JS函数时传递给它的输入(结构或类(,索引是它在结构/类定义中的字段偏移量。您可以在此处阅读有关Microsoft文档中字段偏移的更多信息。以下是一些例子:
[StructLayout(LayoutKind.Explicit)]
public struct InteropStruct
{
[FieldOffset(0)]
public string Name;
[FieldOffset(8)]
public int Year;
}
您也可以使用BINDING
直接从JavaScript函数返回.Net对象,如下所示:
return BINDING.js_string_to_mono_string(`Hello, ${name} (${year})!`);
您可以在浏览器开发工具中发现更多关于这两个对象的信息,例如,通过编写Blazor.platform.
或BINDING.
: