Meteor 在会话更改后反应性地添加类

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-

我有一个名为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-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时,该类确实被添加了。