更新流星模板后运行功能

Cla*_*a B 7 jquery coffeescript meteor meteor-blaze

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

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

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

(类似的问题在这里 - 流星反应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()
Run Code Online (Sandbox Code Playgroud)

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

Pep*_*L-G 6

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

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()
Run Code Online (Sandbox Code Playgroud)

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

<template name="things">
    {{#each things}}
        {{> thing}}
    {{/each}}
</template>

<template name="thing">
    <!-- Show the thing here... -->
</template>
Run Code Online (Sandbox Code Playgroud)
Template.things.helpers({
    things: function(){
        return Things.find()
    }
})

Template.thing.rendered = function(){
    // This get executed each time a new thing is rendered!
}
Run Code Online (Sandbox Code Playgroud)