Обновление свойства компонента бритвы через JS Interop
Я пытаюсь получить события, возникающие на карте JavaScript OpenLayers, для обновления пользовательского интерфейса в компоненте бритвы путем вызова метода экземпляра компонента. Экземпляр компонента передается в функцию JavaScript createMap. Когда пользователь нажимает на карту, вызывается метод экземпляра, и свойство (displayText) обновляется внутри метода, но диапазон в пользовательском интерфейсе не обновляется. На данный момент не так много документации о JS Interop с бритвенными компонентами, поэтому я, скорее всего, неправильно пойму этот подход. Кто-нибудь может объяснить, как это сделать?
Index.cshtml
<script type="text/javascript">
var dotNetHelper;
function createMap(instance) {
dotNetHelper = instance;
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
view: new ol.View({
center: ol.proj.fromLonLat([37.41, 8.82]),
zoom: 4
})
});
map.on('click', function (event) {
console.log(event);
dotNetHelper.invokeMethodAsync('TestInstance', event.coordinate[0], event.coordinate[1]).then((data) => { console.log(data); });
});
}
</script>
Map.razor
@page "/map"
@inject IJSRuntime JsRuntime;
<div>
<button onclick="@CreateMap">create map</button>
</div>
<div>
<span>@displayText</span>
</div>
<div id="map" class="map" style="width:800px;height:600px;"></div>
@functions {
public string displayText { get; set; } = "test";
async void CreateMap()
{
displayText = "howdy";
await JsRuntime.InvokeAsync<int>("createMap", new DotNetObjectRef(this));
}
[JSInvokable]
public string TestInstance(double x, double y)
{
displayText = $"map clicked at {x}, {y}";
return $"map clicked at {x}, {y}";
}
}