会话更改后反应添加类

时间:2015-02-27 16:01:22

标签: 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-link': ->
    if Session.equals('dropdownVisible',false)
      Session.set('dropdownVisible', true)
    else
      Session.closeDropdown()

每当我点击#user-link时,下拉列表都会切换打开/关闭。这很好用。 现在我尝试在下拉容器中添加一个额外的类,只要它被渲染。 所以我有

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)

2 个答案:

答案 0 :(得分:0)

我觉得应该这样做,不是吗?

Template.authUser.events
  'click #user-link': ->
    if Session.equals('dropdownVisible',false)
      Session.set('dropdownVisible', true)
      $('.dropdown-container').addClass("test")
    else
      Session.closeDropdown()

答案 1 :(得分:0)

好的,我发现了问题。

insertElement函数中定义的'next'参数是位于插入元素('node')之后的DOM元素。在这个例子中,没有,因为'node'(。dropdown-container)是包装容器中唯一的元素。因此它永远不会被插入。