Meteor:使用数据渲染模板后调用函数 [英] Meteor: Call function after template is rendered with data

查看:18
本文介绍了Meteor:使用数据渲染模板后调用函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在轮播中显示一些帖子.对于轮播,我使用 OwlCarousel .

 

{{/每个}}

我这样称呼我的轮播:

Template.featuredCarousel.rendered = function(){$('#featured-carousel').owlCarousel({循环:真,自动播放:真,自动播放超时:3000,项目:1,智能速度:1080,填充:80});this.rendered = true;};

我得到的结果是 Owl 基本上认为我只有一个项目要显示在多个 div 的轮播中.显然发生的是 Template.featuredCarousel.rendered 中的函数在模板的 #each-part 完成之前或数据到达之前被调用.

如何使实例化轮播的函数仅在模板完全呈现包括所有数据后才被调用?

非常感谢您的帮助.

P.S.:我使用 Iron-router 进行路由,如下所示:

Router.map(function(){this.route('家', {小路: '/',等待:功能(){return Meteor.subscribe('精选');},数据:函数(){返回 {featuredPosts: Featured.find({})};}});});

P.P.S.:我也尝试过使用加载模板,但这也无济于事.

解决方案

您已经正确地指出了您的问题:

<块引用>

显然发生的是 Template.featuredCarousel.rendered 中的函数在模板的 #each-part 完成之前或数据到达之前被调用.

模板的 rendered 回调仅在您的模板实例第一次插入 DOM 时调用一次,因此如果您的数据尚未准备好(从服务器获取)但 #each 块将成功t 生成任何 HTML 元素,当您实例化轮播时,它会显示为空.

您可以做的是确保您的数据在您的 rendered 回调触发之前准备就绪.显然你已经尝试设置这个解决方案但没有运气,你确定你像这样添加了默认加载钩子吗?

Router.onBeforeAction("loading");

更好的解决方案是在呈现的回调中监听数据库更改,并在第一次获取项目时相应地重新初始化轮播,然后动态添加和/或删除.

HTML