Blazor Unmarshalled JavaScript interop



为了提高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)
  1. 函数Blazor.platform.*在哪里定义
  2. 应该使用哪一个来检索ElementReference类型的参数
  3. 函数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.:

最新更新