Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从Meteor中的特定路由排除引导

从Meteor中的特定路由排除引导
EN

Stack Overflow用户
提问于 2013-07-16 20:05:54
回答 3查看 1.1K关注 0票数 5

我希望任何人都能对此提供一些意见,

我正在创建一个流星应用程序,在其中我想使用bootstrap来创建管理环境,但让访问者面对使用自定义css的一侧。当我使用meteor将bootstrap包添加到我的应用程序中时,它在每个页面上都可用,有没有办法将bootstrap的加载限制到'/admin‘中的路由?

EN

回答 3

Stack Overflow用户

发布于 2013-07-16 21:44:15

当你添加bootstrap包时,这是不可能的。但是,您可以将bootstrap csses添加到public目录,然后将其加载到仅当您在仪表板中时才会呈现的头子模板中。

编辑

,但是你该如何创建独立的头部模板呢?

简单:

代码语言:javascript
运行
AI代码解释
复制
<head>
    ...
    {{> adminHeader}}
    ...
</head>


<template name="adminHeader">
    {{#if adminPage}}
        ... // Put links to bootstrap here
    {{/if}}
</template>



Template.adminHeader.adminPage = function() {
    return Session.get('adminPage');
}


Meteor.router.add({
    '/admin': function() {
        Session.set('adminPage', true);
        ...
    }
});
票数 3
EN

Stack Overflow用户

发布于 2013-07-16 21:46:06

免责声明:我不确定是否有一种“流星方式”可以做到这一点,所以下面是我用普通的JS.如何做到这一点。

jQuery

代码语言:javascript
运行
AI代码解释
复制
$("link[href='bootstrap.css']").remove();

JS -归功于

代码语言:javascript
运行
AI代码解释
复制
function removejscssfile(filename, filetype){
 var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none" //determine element type to create nodelist from
 var targetattr=(filetype=="js")? "src" : (filetype=="css")? "href" : "none" //determine corresponding attribute to test for
 var allsuspects=document.getElementsByTagName(targetelement)
 for (var i=allsuspects.length; i>=0; i--){ //search backwards within nodelist for matching elements to remove
  if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1)
   allsuspects[i].parentNode.removeChild(allsuspects[i]) //remove element by calling parentNode.removeChild()
 }
}

removejscssfile("bootstrap.css", "css")

但是,这样做将完全将其从页面中删除。我不确定meteor是否会在用户转到另一个页面时尝试readd它。如果没有自动读取,那么当有人从管理部分转到主站点时,就会出现引导程序不包含的问题,这将破坏站点的外观。

解决这个问题的方法是禁用和启用样式表:

代码语言:javascript
运行
AI代码解释
复制
Meteor.autorun(function(){
  if(Session.get('nobootstrap')){
    $("link[href='bootstrap.css']").disabled = true;
  }else{
    $("link[href='bootstrap.css']").disabled = false;
  }
});

可能还有其他引导程序资源需要删除,看看你的页面正在加载什么。

要以相同的方式使用jQuery,但对于javascript文件,请记住将链接更改为脚本,将href更改为src

根据我的测试,Meteor不会在文件被删除后自动重新添加文件,所以如果您希望同一用户能够在主站点和管理站点之间来回切换,则需要找到某种动态重新添加它们的方法。或者简单地说,如果主站点的http引用来自管理员,强制重新加载页面,然后引导资源将加载,一切看起来都很漂亮。

附注:确保为jQuery版本获取正确的href

票数 1
EN

Stack Overflow用户

发布于 2015-06-14 18:33:29

如果有人对包含任何js/css文件感兴趣,我为它写了一个帮助器:

代码语言:javascript
运行
AI代码解释
复制
if (Meteor.isClient) {

  // dynamic js / css include helper from public folder
  Handlebars.registerHelper("INCLUDE_FILES", function(files) {
    if (files != undefined) {
      var array = files.split(',');
      array.forEach(function(entity){
        var regex = /(?:\.([^.]+))?$/;
        var extension = regex.exec(entity)[1];
        if(extension == "js"){
          $('head').append('<script src="' + entity + '" data-dynamicJsCss type="text/javascript" ></script>');
        } else if (extension == "css"){
          $('head').append('<link href="' + entity + '" data-dynamicJsCss type="text/css" rel="stylesheet" />');
        };
      });
    }
  });
  Router.onStop(function(){
    $("[data-dynamicJsCss]").remove();
  });

}

然后简单地使用:

代码语言:javascript
运行
AI代码解释
复制
{{INCLUDE_FILES '/css/html5reset.css, /js/test.js'}}

在您加载的任何模板中:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17685957

复制
相关文章

相似问题

成员从特定路由中排除混入

13

从Vue.js中的某些路由中排除引导样式

22

Symfony -从安全路径中排除特定路由

21

Meteor中的路由

31

路由regex要求:排除特定的单词

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文