Tracker.autorun()不执行jQuery函数

时间:2014-10-24 18:07:05

标签: meteor

每当路由发生变化时,我都会使用Router.onAfterAction更新一些Session变量。然后我有一个Tracker.autorun()等待更改,因此它可以运行一些逻辑并更新一些DOM类。我检查了Sessions设置是否正确,并且要追加的元素是否正确定位。但我的addClass()不会触发。没有控制台错误。我错过了什么?

Tracker.autorun(function (c) {

  var colActive = Session.equals('navColumnActive', true);
  var colVisible = Session.equals('navColumnVisible', true);
  var $col = $("#nav-column");
  console.log($col);


  if (colActive) {
    console.log("if triggered");
    $col.addClass( "active" );
  } else {
    console.log("else triggered");
    $col.removeClass("active");
  }
  if (colVisible) {
    $col.addClass("visible");
  } else {
    $col.removeClass("visible");
  }
});

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题。在我的例子中,反应值触发在DOM之前执行的计算和正确呈现的元素。

我会检查在呈现DOM之后是否正在设置会话变量。因此,$col = $("#nav-column")之类的选择器变回空白,但在浏览器控制台中执行时效果很好。

您可以尝试以下方法:

Template.<template_name>.onRendered(function() {
  Session.set('navColumnActive', true);
  Session.set('navColumnVisible', true);
})