Meteor 在会话更改后反应性地添加类
我有一个名为dropdownVisible的会话Meteor 在会话更改后反应性地添加类,meteor,Meteor,我有一个名为dropdownVisible的会话 Session.setDefault('dropdownVisible', false) 我有以下模板/事件 template(name="authUser") a(id="user-link") User Link if dropdownVisible .dropdown-container p This is a dropdown Template.authUser.events 'click #user-
Session.setDefault('dropdownVisible', false)
我有以下模板/事件
template(name="authUser")
a(id="user-link") User Link
if dropdownVisible
.dropdown-container
p This is a dropdown
Template.authUser.events
'click #user-link': ->
if Session.equals('dropdownVisible',false)
Session.set('dropdownVisible', true)
else
Session.closeDropdown()
每当我点击#用户链接时,下拉菜单将切换打开/关闭。这个很好用。
现在,无论何时渲染,我都试图向下拉列表容器添加一个额外的类。
所以我有
Template.loggedOut.rendered = ->
$('.dropdown-container').addClass("test")
这会在第一次渲染类时添加该类,但不会在渲染之后添加。我怀疑这与反应性有关。我试着把它包装在Tracker.autorun函数中,但是没有用。如何在每次打开下拉列表时调用addClass
**编辑
我使用了addClass示例,但实际上我想使用_uihooks为下拉菜单设置动画。我只是使用addClass示例来简化示例,因为它可能与我在uihooks中面临的问题类似
Template.loggedOut.rendered = ->
@find('.parent-of-dropdown-container')._uihooks =
insertElement: (node, next) ->
$(node).addClass("animate").insertBefore(next)
在我看来这应该行的,不是吗
Template.authUser.events
'click #user-link': ->
if Session.equals('dropdownVisible',false)
Session.set('dropdownVisible', true)
$('.dropdown-container').addClass("test")
else
Session.closeDropdown()
好的,我发现了问题
insertElement函数中定义的“next”参数是位于插入元素(“节点”)后面的DOM元素。在本例中,没有,因为“node”(.dropdown container)是包装容器中唯一的元素。因此,它从未被插入。我发现了使您的示例起作用的问题。当我在setTimeout函数中用一个小延迟包装addClass时,该类确实被添加了。