Javascript 在Aurelia中动态加载内容后执行函数

Javascript 在Aurelia中动态加载内容后执行函数,javascript,aurelia,aurelia-templating,Javascript,Aurelia,Aurelia Templating,我正在使用 我有一个post路由,它根据传递的id显示一个post。 服务器编译用于将帖子写入HTML的标记,我使用以下方法将此内容加载到模板中: <div innerHTML.bind="post.content"></div> 当内容已附加到视图时,我找不到任何方法来执行函数。 如果我只使用: this.post = data; this.displayLineNumbers(); 它将失败,因为内容尚未附加,因此我的功能要更改的元素尚未可用。我目前使用的解决方法

我正在使用

我有一个
post
路由,它根据传递的
id
显示一个post。 服务器编译用于将帖子写入HTML的标记,我使用以下方法将此内容加载到模板中:

<div innerHTML.bind="post.content"></div>
当内容已附加到视图时,我找不到任何方法来执行函数。 如果我只使用:

this.post = data;
this.displayLineNumbers();
它将失败,因为内容尚未附加,因此我的功能要更改的元素尚未可用。我目前使用的解决方法是等待200毫秒,然后执行函数


是否有任何方法(事件或函数)可以知道动态加载的内容何时被附加?或者是另一种模板化内容的方式,而不是
innerHTML.bind

从技术上讲,Aurelia已经将自己连接到DOM,并且不知道在这个阶段您将在页面中添加什么。但是,这听起来像是任务队列的候选者。我还记得有一个事件,您可以附加到主要针对e2e测试的事件,名为
aurelia Composited
,但我从未需要或研究过

任务队列允许您将任务推送到任务队列的底部,Aurelia使用任务队列对任务进行优先级排序,例如if/show绑定等等。我相信这可能会达到你想要的效果

import {TaskQueue} from 'aurelia-framework';

activate() {
client
    .fetch(`api/post/${params.id}`)
    .then(res => res.json())
    .then(data => {
        this.post = data;

        this.taskQueue.queueMicroTask(() => {
            this.displayLineNumbers();
        });
    });
}

这是一个很多人都问过的问题。。。这是一个很好的解决方案。似乎Aurelia应该考虑添加一个生命周期钩子(如果可能的话),它自动添加<代码> .QueReMICROSTASK()/代码>,并调用VIEW模型方法(如<代码> BIDIN FIN()/代码>)。我们建议使用<代码> QuealEngRoWorks,并在我们的官方培训课程中教这一点。
import {TaskQueue} from 'aurelia-framework';

activate() {
client
    .fetch(`api/post/${params.id}`)
    .then(res => res.json())
    .then(data => {
        this.post = data;

        this.taskQueue.queueMicroTask(() => {
            this.displayLineNumbers();
        });
    });
}