我在自定义组件的淘汰数据绑定列表周围使用owlCarousel,模板async加载了require。 为了使设置起作用,我必须在渲染所有DOM元素之后初始化carousel对象。 setTimeout函数是一个工作难看的选项。当knockout完成所有异步DOM操作时,是否有某种事件会得到通知?
答案 0 :(得分:0)
您可以使用foreach绑定的afterRender回调。在此KO文档页面上搜索“afterRender”:
http://knockoutjs.com/documentation/foreach-binding.html
每次渲染列表中的项目时都会调用afterRender,因此您可能需要编写一些代码来在viewmodel中进行一些计数,以便知道何时击中列表中的最后一项,那时你可以初始化旋转木马。不是超级干净,但肯定比你处理任意延迟和可能的竞争条件的setTimeout方法更好。
另一种选择是为旋转木马编写自己的自定义Knockout绑定。似乎这将是最干净的方法,并且可以重复使用。看起来至少有一个人有同样的需求。您可能会发现他们在GitHub上的自定义绑定很有用:
https://github.com/Crunc/knockout-owlCarousel
之前我没有使用过此绑定,因此我无法确认它是否符合您的需求,但它可能是您的良好起点。