Meteor-在DOM render上运行代码\r重新渲染

Meteor-在DOM render上运行代码\r重新渲染,meteor,Meteor,HTML 此代码$('.ui.popup').popup()初始化各个元素(语义ui)上的弹出窗口。问题是它在tpl render上只运行一次,因此仅影响此节点:夜间无弹出窗口。 此外,当我再次选择day返回时-这次没有弹出窗口!因为它调用了全新的“day”div的呈现,而不是旧的。 这里可以做什么?试着用你的日夜div制作一个组件: Template.sometpl.helpers day:-> if $('select').val()=='day' then true nigh

HTML

此代码
$('.ui.popup').popup()
初始化各个元素(语义ui)上的弹出窗口。问题是它在tpl render上只运行一次,因此仅影响此节点:
夜间
无弹出窗口。
此外,当我再次选择
day
返回时-这次没有弹出窗口!因为它调用了全新的“day”div的呈现,而不是旧的。

这里可以做什么?

试着用你的日夜div制作一个组件:

Template.sometpl.helpers
  day:-> if $('select').val()=='day' then true
  night:-> if $('select').val()=='night' then true

Template.sometpl.onRendered ->
      $('.ui.popup').popup()
然后你可以这样做:

Template.popup.onRendered(function() {
    this.$('.ui.popup').popup()
});

原来我需要使用
Tracker.afterFlush
Tracker.autorun

完成。

谢谢大家。

谢谢。但是,是否可以在不包含其他模板的情况下完成此操作?也许我过于简化了我的示例,但实际上我有数百个这样的
select
s,正如您可能想象的那样,为它们维护数百个相应的TPL是一件痛苦的事情。假设弹出窗口都遵循类似的格式,您只需要一个额外的模板,如上所示。只要将
text
day
更改为
popupText
text
,如果这样更清楚,然后在需要弹出窗口的地方使用这些变量调用模板…@avalanch1替代方法是使用
this.autorun(function(){$(.popup”).popup()
onRendered
块中。你还必须加入一些反应性的东西。使用助手,您可以直接查询选择字段,但如果您使用某种反应性变量(无论如何,您都应该)并在
autorun
块中查询该反应性变量,则当您更改选择字段时,该变量应会更新。@Akshat这里他们给了我一个使用
ReactiveVar
的建议,我用它制作了一个示例垫,但它似乎不起作用。你能不能看一下,然后用
这个.autorun
<template name="popup">
   <div class='ui popup' data-popup='{{text}}'>{{day}}</div>
</template>
Template.popup.onRendered(function() {
    this.$('.ui.popup').popup()
});
{{#if day}}
    {{>popup text="I'm awake" day="day"}}
{{/if}}

{{#if night}}
    {{>popup text="I'm asleep" day="night"}}
{{/if}}