如何告诉 Javascript 方法等到绑定值后在 DotVVM 中执行?

How do I tell a Javascript method to wait until after binding values to execute in DotVVM?

我使用值绑定 (<dot:HtmlLiteral Html="{value: BannerHTML}" class="mainBanner"/>) 根据许多变量生成我的一些页面内容。

我还需要在生成的 HTML 上 运行 一些 javascript 来修复一些小问题,例如为不寻常的缩放场景匹配字体大小等。作为标准,我将可执行文件 javascript 放在 HTML 文档的 end 处。

在以下情况之一中生成 HTML:

<div class="mainBanner" data-bind="html: BannerHTML">
    <div class="mainBanner-upper">some text</div>
    <div class="mainBanner-face" id="mainTitle">some other text</div>
    <div class="mainBanner-lower">some more text</div>
</div>

JS 对其进行操作 HTML:
(需要 https://github.com/adactio/FitText.js

window.fitText(document.getElementById("mainTitle"));

据我所知,javascript 在生成 HTML 之前执行,而 javascript 在元素 returns [=14= 上执行].我如何告诉它等待?我尝试将 javascript 文件绑定到资源,并在 body 元素末尾用 <script> 标记简单地将其写入但没有成功。

由于您的问题似乎与DOM相关,我可以向您推荐两种方法。

  1. 您的 javascript 必须检查并等待 DOM。我强烈建议您阅读这篇 answer to ...how to call a function when the page/DOM is ready...

  2. 绑定数据后动态添加脚本(我不太确定)

祝你好运。

编辑

所以我查看了 dotvvm 文档以查找事件调用并发现了一些有趣的东西:

每个 DotVVM 页面都包含 Dotvvm.js,它在全局范围内定义了 dotvvm。此对象可用于访问视图模型并对各种页面事件做出反应。

这允许您访问由 DOTVVM 触发的特定事件,您只需找到您需要的事件即可。我在下面为您提供了一个示例。

你可以尝试这样的事情(活动可能不是你需要的):

<script>
    //By subscribing to the event, your code will only be executed 
    // if "init" event is fired by dotvvvm
    dotvvm.events.init.subscribe(()=>{ 
        window.fitText(document.getElementById("mainTitle"));  
        //basically enclose the content of your script tag with this.
    });
</script>

请务必阅读文档,因为我可能遗漏了什么? DOTVVM Javascript Events