- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
自定义组件
我已经为我的应用程序的导航创建了一个自定义组件。它由一个 ul
元素组成,其所有 li
元素都是根据路由器导航列表中的项目动态创建的。这是在组件的附加事件中发生的。这里没有什么特别的事情发生。
自定义属性
但因为我想要一个好看的花哨菜单,所以我还创建了一个自定义属性并将其实现到自定义组件的根 ul
元素中。在自定义属性的 attached
事件中,我想做一些 dom
操作,以便我的菜单看起来像那些酷 child 创建的菜单。
问题
尽管自定义属性的 attached
事件在自定义组件的 attached
事件之后触发,但动态创建的 li
项并不属于dom 中的自定义属性的 attached
事件还没有。
问题
我的假设是,在 attached
事件中,实际组件的 view
附加到 dom,并且之前的所有组件也附加到 dom。当我完成 attached
事件时,这里动态创建的 html 也会被附加。我是不是搞错了?
附注
我知道使用 TaskQueue
可以解决我的问题。但是,我想首先知道是否有不同的方法/解决方案,因为我相信及时移动事物可能会导致一系列悖论,让您陷入维护噩梦。
最佳答案
请允许我消除您对任务队列的误解。
您及时移动事物导致维护问题的想法肯定适用于使用setTimeout()
,因为这会导致实际的延迟,并强制执行到下一个事件循环。 queueTask()
或多或少是相同的东西(它在内部使用 setTimeout()
)。
但是,TaskQueue 的 queueMicroTask()
方法的工作方式非常不同。
当您调用 queueMicroTask()
时,与 queueTask()
和 setTimeout()
不同,任务被安排为立即在同一事件循环上执行。这是一个非常健壮的机制,具有有保证的执行顺序,在进行任何 DOM 操作之前,在 attached()
中使用它通常被认为是良好的做法。
事实上,queueMicroTask()
由 Aurelia 在内部的多个地方使用(主要在 绑定(bind)
和 模板资源
中)。两个值得注意的地方是:
repeat
属性使用它来设置 ignoreMutations
标志(并在队列刷新后取消设置),以防止在更新其内部集合时无限递归您通常可以认为bind() 和attached() Hook 有两个“阶段”:非排队阶段和排队阶段。排队阶段是组件执行依赖于整个组件图首先通过其他(通常是递归)进程完成的工作的阶段。
queueMicroTask()
不延迟执行,只是将其推到调用堆栈的末尾
它的功能相当于将函数作为回调传递到调用堆栈的末尾,但可以省去您编写定位最后一个调用并将其全部连接起来所需的意大利面条代码的麻烦。 super 干净。
all its li elements are dynamically created based on the items in the router's navigation list. This is happening in the attached event of the component
看,每当您在 attached()
期间创建任何内容时,您都不能依赖在另一个组件的 attached()
期间创建的内容,因为这取决于顺序的编译/组合。那是内部问题。对于自定义属性来说尤其如此。自定义属性(尤其是样式库中的属性)到处使用 TaskQueue,因为这是它们可以依赖 DOM 完成的唯一方式。
在这里使用queueMicroTask()
将保证两件事:
解决这个问题的最佳(也许也是唯一正确的)方法确实是使用任务队列 - 我保证:)
关于javascript - 自定义属性附加事件太早了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48596232/
我关注了 tutorial on creating a popup for an add-on在 Firefox 中,效果很好。 我现在遇到的问题是它创建的弹出窗口不会更改大小以适应我添加到其中的内容
我有一些视频,我需要连接一个标题并添加一些覆盖,问题是我需要先做覆盖,否则时间不正确,然后才将标题连接到视频的开头 ffmpeg -i talk.mp4 -i start_pancarte.png
我正在尝试附加一个 CSV 文件。这是我正在使用的线路。不幸的是,我找不到 export-csv 的附加选项。任何想法都有助于使其发挥作用。 Get-ADGroupMember "Domain Adm
我正在努力理解 Attach API (com.sun.tools.attach.*) 的用途。它的典型用途是什么?它是为了“模拟”JVM,以便您可以在不部署/启动代码的情况下测试您的代码吗?它是一个
我不明白为什么这不起作用。 soup_main = BeautifulSoup('FooBar') soup_append = BeautifulSoup('Meh') soup_main.body.
我有以下代码来返回我想要的字符串 $sql = " SELECT `description` FROM `auctions` WHERE `description` REGEX
我正在尝试从数组中附加具有多个值的元素,但我做错了。这是我的代码: for(var i=0; i ` + pricesArray[i].start_date ` ` + pricesArray[i
我正在尝试将图像链接添加到此 javascript 附加表中。使图像位于按钮上方 这是代码 $("#1").append(""+section+""+no+""+price+""+button+""
我有一个问题,我已经解决了,但它太烦人了。 我有一个 js 代码,当使用“追加”按下按钮时,它会放下一些 html 代码,并且通过该代码,我为 x 按钮提供了一个 id,并为容器元素提供了一个 id。
我想逐行读取文件,并且每一行可能都有很多字符。 这个版本的readline效果很好 func readLine(r *bufio.Reader) ([]byte, error) { var (
我有一个网站,每次用户登录或注销时,我都会将其保存到文本文件中。 如果不存在,我的代码在附加数据或创建文本文件时不起作用。这是示例代码 $myfile = fopen("logs.txt", "wr"
我正在尝试使用 typescript 和 Formik 创建一个自定义输入字段。我可以就完成以下代码的最佳方式获得一些帮助吗?我需要添加额外的 Prop 标签和名称......我已经坚持了一段时间,希
我有一个字符串 big_html,我想将它添加到某个 div 中。我观察到以下方面的性能差异: $('#some-div').append( big_html ); // takes about 10
如何使用 FormData 创建以下结果 ------WebKitFormBoundaryOmz20xyMCkE27rN7 Content-Disposition: form-data; name="
有没有办法附加 jQuery 事件处理程序,以便在任何先前附加的事件处理程序之前触发该处理程序?我遇到了this article ,但代码不起作用,因为事件处理程序不再存储在数组中,而这正是他的代码所
我正在开发一个需要网络登录的 iPhone 应用程序。像往常一样我打电话 [[UIApplication sharedApplication] openURL:loginURL]; 这将关闭应用程序并
我想开发一个仅针对特定域激活的扩展。 我不希望它在不浏览此特定域时出现在浏览器菜单中。 有可能这样做吗? 最佳答案 可能:对于菜单,您可以添加一个弹出窗口侦听器,用于检查当前加载的URL(docs f
这段 JavaScript 代码 function writeCookie(CookieName, CookieValue, CookieDuration) { var expiration
我正在使用 Handlebars 来渲染使用ajax从本地服务器获得的信息。我的 HTML 看起来像: {{#each Tabs}}
我尝试了以下代码,但当输入框中没有数据时它不会通知。当我直接添加此内容(不附加)时,它会起作用。我在这里做错了什么 var output = "\n"+ "\n"+
我是一名优秀的程序员,十分优秀!