gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:40:15 25 4
gpt4 key购买 nike

我正在使用 Aurelia .

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

<div innerHTML.bind="post.content"></div>

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

// this is the workaround I am currently using
setTimeout(this.displayLineNumbers, 200);
});

当内容附加到 View 时,我找不到任何方法来执行函数。如果我只使用:

this.post = data;
this.displayLineNumbers();

它将失败,因为内容尚未附加,因此我的函数要更改的元素尚不可用。我目前使用的解决方法是等待 200 毫秒,然后执行函数。

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

最佳答案

从技术上讲,Aurelia 已将自己附加到 DOM,并且对您在此阶段向页面中放入的内容一无所知。但是,这听起来像是任务队列的候选者。我还记得您可以附加一个主要针对端到端测试的事件,称为 aurelia-composed,但我从来不需要也没有研究过它。

任务队列允许您将任务推送到任务队列的底部,Aurelia 使用它来确定任务的优先级,例如 if/show 绑定(bind)等等。我相信这可能会做你想做的事。

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();
});
});
}

关于javascript - 在 Aurelia 中动态加载内容后执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42241091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com