根据 Meteor 中的 URL 更改主体 Class
Change Body Class Based On URL in Meteor
我的应用程序中有一个名为 layout 的模板。里面有:
<body id="body class="{{blue}}>
基本上我想要实现的是当你打一个url的时候,比如www.abc.com/sky,我想添加一个正文class的蓝色:
<body id="body class="blue">
在我的 client 文件夹中,我有这个但似乎不起作用:
Template.layout.helpers({
blue: function() {
var loc = window.location.href; // returns the full URL
if(/sky/.test(loc)) {
$('#body').addClass('blue');
}
}
});
我是 javascript 世界的新手,我正在学习教程,但该教程并非针对 Meteor。
您应该像这样修改 onRendered 中的 DOM 个元素:
Template.layout.onRendered(function() {
// get the current route name (better than checking window.location)
var routeName = Router.current().route.getName();
// add the class to body if this is the correct route
if (routeName === 'myRoute')
$('body').addClass('blue');
});
Template.layout.onDestroyed(function() {
// remove the class to it does not appear on other routes
$('body').removeClass('blue');
});
另一种(可能更简单)解决方案是在您的 body
模板上使用助手:
Template.body.helpers({
klass: function() {
if (Router.current().route.getName() === 'myRoute') {
return 'blue';
}
}
});
那么您的 body
可能如下所示:
<body class="{{klass}}"></body>
我也需要这个功能并发现了与@phocks 相同的问题,因为 {{klass}}
只能在 内部 而不能在 body 标签上使用。我是 Meteor 的新手,但这是我的方法,它只使用了一些 jQuery:
Template.body.onRendered(function(){
var instance = this;
instance.autorun(function() {
FlowRouter.watchPathChange();
var context = FlowRouter.current();
// this does the trick, below
$('body').attr('class', '').addClass(context.route.name);
// this is just to do more CSS stuff if they're logged in
if(Meteor.userId()){
$('body').addClass('logged-in');
} else {
$('body').removeClass('logged-in');
}
});
});
我在 body.js
文件中使用它,并且此代码依赖于 FlowRouter。在路径更改时,我得到我为路由声明的 name
,从 body 标记中删除所有以前的路由名称,然后添加当前路由的名称。
作为一个小的旁注,我还在正文中为经过身份验证的用户添加了 class 或 logged-in
,这就是底部几行所做的。
我的应用程序中有一个名为 layout 的模板。里面有:
<body id="body class="{{blue}}>
基本上我想要实现的是当你打一个url的时候,比如www.abc.com/sky,我想添加一个正文class的蓝色:
<body id="body class="blue">
在我的 client 文件夹中,我有这个但似乎不起作用:
Template.layout.helpers({
blue: function() {
var loc = window.location.href; // returns the full URL
if(/sky/.test(loc)) {
$('#body').addClass('blue');
}
}
});
我是 javascript 世界的新手,我正在学习教程,但该教程并非针对 Meteor。
您应该像这样修改 onRendered 中的 DOM 个元素:
Template.layout.onRendered(function() {
// get the current route name (better than checking window.location)
var routeName = Router.current().route.getName();
// add the class to body if this is the correct route
if (routeName === 'myRoute')
$('body').addClass('blue');
});
Template.layout.onDestroyed(function() {
// remove the class to it does not appear on other routes
$('body').removeClass('blue');
});
另一种(可能更简单)解决方案是在您的 body
模板上使用助手:
Template.body.helpers({
klass: function() {
if (Router.current().route.getName() === 'myRoute') {
return 'blue';
}
}
});
那么您的 body
可能如下所示:
<body class="{{klass}}"></body>
我也需要这个功能并发现了与@phocks 相同的问题,因为 {{klass}}
只能在 内部 而不能在 body 标签上使用。我是 Meteor 的新手,但这是我的方法,它只使用了一些 jQuery:
Template.body.onRendered(function(){
var instance = this;
instance.autorun(function() {
FlowRouter.watchPathChange();
var context = FlowRouter.current();
// this does the trick, below
$('body').attr('class', '').addClass(context.route.name);
// this is just to do more CSS stuff if they're logged in
if(Meteor.userId()){
$('body').addClass('logged-in');
} else {
$('body').removeClass('logged-in');
}
});
});
我在 body.js
文件中使用它,并且此代码依赖于 FlowRouter。在路径更改时,我得到我为路由声明的 name
,从 body 标记中删除所有以前的路由名称,然后添加当前路由的名称。
作为一个小的旁注,我还在正文中为经过身份验证的用户添加了 class 或 logged-in
,这就是底部几行所做的。