每当路由发生变化时,我都会使用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");
}
});
答案 0 :(得分:0)
我最近遇到了同样的问题。在我的例子中,反应值触发在DOM之前执行的计算和正确呈现的元素。
我会检查在呈现DOM之后是否正在设置会话变量。因此,$col = $("#nav-column")
之类的选择器变回空白,但在浏览器控制台中执行时效果很好。
您可以尝试以下方法:
Template.<template_name>.onRendered(function() {
Session.set('navColumnActive', true);
Session.set('navColumnVisible', true);
})