我正在修改文本区域元素上的 CodeMirror。我正在使用 javascript interop 来完成此操作,并且在应用代码镜像时它工作正常。但是,我的意图是返回该 codemirror 元素并将其存储在另一个 elementref 中。
Blazor.registerFunction('BlazorExt.CodeMirrorSetupExt', (element) =>
{
return CodeMirror.fromTextArea(element,
{
mode: 'application/ld+json',
matchBrackets: true,
autoCloseBrackets: true,
indentWithTabs: true,
lineNumbers: true,
autofocus: true,
styleActiveLine: true,
readOnly: false,
autoCloseBrackets: true,
foldGutter: true,
height: 'auto',
width: 'auto',
gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter']
});
});
public static ElementRef CodeMirrorSetupExt(this ElementRef elementRef)
{
var result = RegisteredFunction.Invoke<ElementRef>("BlazorExt.CodeMirrorSetupExt", elementRef);
return result;
}
在我的组件中:
//in my html i have a textarea with ref of TextArea
ElementRef CodeMirror;
ElementRef TextArea;
protected override void OnAfterRender()
{
CodeMirror = TextArea.CodeMirrorSetupExt();
}
理想情况下,在这一点之后,我应该能够使用它的函数来更新我的 codemirror ref。
Blazor.registerFunction('BlazorExt.CodeMirrorUpdateExt', (element, Value) =>
{
element.getDoc().setValue(Value);
});
public static void CodeMirrorUpdateExt(this ElementRef elementRef, string Value)
{
var args = new object[] { elementRef, Value };
RegisteredFunction.Invoke<object>("BlazorExt.CodeMirrorUpdateExt", args);
}
再次在组件中,我应该能够像这样更新代码镜像:
CodeMirror.CodeMirrorUpdateExt("somedata");
但是我得到一个例外: Microsoft.AspNetCore.Blazor.Browser.Interop.JavaScriptException: 无法读取 null 的属性“getDoc”
是我试图在可能之外完成的事情,还是不可能将 codemirror javascript 对象传递给 elementref?