Meteor-在DOM render上运行代码\r重新渲染
HTML 此代码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
$('.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}}