更新meteor模板后运行function

我有一个meteor模板渲染一些我需要执行jquery函数的html。 现在,我已经设置了一个依赖项,这样每次绑定到该模板的数据(对象列表)都会发生变化时,该函数就会运行。 我不确定这是我正在尝试做的最好的方法,但每次添加/删除/重新排列对象时它都会运行该function,所以这是一个开始。

但是 ,该函数似乎在重新呈现模板之前正在运行,因此前一组块得到了jquery-fied,但是我刚刚在该操作上添加的任何块都没有。

有没有办法强制函数在呈现/更新模板后运行? 任何帮助深表感谢!

(类似的问题在这里 – meteor反应jquery – 但它没有任何答案)

以下是一些可能相关的代码位:

Template.showPictures.rendered = Deps.autorun () -> album = Albums.findOne(Session.get("selectedAlbum")) if (album) pictures = album.orderedPictures() MyApp.loadJQuery() Template.showPictures.helpers pics: -> MyApp.myDependency.depend() album = Albums.findOne(Session.get("selectedAlbum")) album.orderedPictures() 

(为什么我的Template.rendered中的自动运行?不确定。这似乎是一个好的地方,但这是我第一次真正处理依赖关系,所以我可能完全偏离这里。任何想法出了什么问题会很棒。)

您可以使用Tracker.afterFlush (并且TrackerDeps的新名称):

 Template.showPictures.rendered = Tracker.autorun () -> album = Albums.findOne(Session.get("selectedAlbum")) if (album) Tracker.afterFlush -> // This will get executed when (among other things) // the UI has been updated. pictures = album.orderedPictures() MyApp.loadJQuery() 

但是,Meteor方式更像是这样的:

   
 Template.things.helpers({ things: function(){ return Things.find() } }) Template.thing.rendered = function(){ // This get executed each time a new thing is rendered! } 

我发现了一些有用的东西,但它看起来仍然很糟糕……

我最终做的是设置超时。 所以现在,我没有上面的代码,而是:

 Template.sitePreview.rendered = () -> Deps.autorun () -> album = Albums.findOne(Session.get("selectedAlbum")) if (album) pictures = album.orderedPictures() setTimeout MyApp.loadJQuery, 500 

到目前为止,模板有足够的时间进行渲染/更新,因此JQuery可以运行所有最新的数据。 仍然希望有一个更优雅的解决方案,但这样做!