代码之家  ›  专栏  ›  技术社区  ›  J4N

blazor代码调用的Javascript在DOM尚未就绪时发生?

  •  -1
  • J4N  · 技术社区  · 7 年前

    我有一个javascript函数,必须创建图形:

    <script>
        window.setGraph = (lab, ser) => {
            console.log(document.getElementById("weather-chart"));
            console.log(lab);
            console.log(ser);
            var chart = new Chartist.Line('#weather-chart', {
                labels: lab,
                series: ser
            });
    
            console.log("done");
            return true;
        }    
    </script>
    

    此函数由我的blazor组件之一调用:

    protected override async Task OnInitAsync()
    {
        some-data-a = await RetrieveSomeData();
        some-data-b = await RetrieveSomeOtherData();
        JSRuntime.Current.InvokeAsync<bool>("setGraph", some-data-a, some-data-b);
    }
    

    一切都完成了,我的朋友 console.log 被称为。但现在看来,我的元素 #weather-chart 找不到,因为我得到了以下信息:

    chartist.min.js:8 Uncaught TypeError: Cannot read property 'querySelectorAll' of null
        at Object.c.createSvg (chartist.min.js:8)
        at f.d [as createChart] (chartist.min.js:8)
        at f.h (chartist.min.js:8)
    

    我的控制台。日志(文件…)正在返回null。

    如果我进入这一页,我就知道了错误,如果在得到这个错误后,我会做一些类似的事情 window.setGraph([1,2,3], [[1,2,3]]) 在我的chrome开发者工具中,一切都已正确初始化。

    那我做错了什么?为什么图表绘制者似乎无法找到元素?

    1 回复  |  直到 7 年前
        1
  •  -1
  •   J4N    7 年前

    blazor的数据绑定似乎花费了一些时间来显示html。所以基本上,在我设置了_项之后,它改变了模板,但速度不够快,无法完成后面的行(不确定为什么,因为有等待)。

    推荐文章