1

当您在管理设置中设置默认视图,并且您有多个视图被选中以供用户切换时,默认视图不会突出显示为“活动”。

为了实现这一点,在以前版本的 Telescope 中(在 RefactorScope 之前)我修改了文件 client/components/menu/menu_component.js添加了这个(我有 TOP 作为我的默认视图,所以我可耻地硬编码它):

if (currentPath === "/" && getRoute(this) === "/top") {
  itemClass += " item-active"
}

我知道,编辑 Telescope 源文件不是明智之举,但它是最快和最简单的解决方案。现在,在望远镜大重构之后,我想以正确的方式去做。

但最终的问题是,这样做的正确方法是什么?

4

1 回答 1

1

在对望远镜源进行了一些挖掘之后,我得出了这个解决方案:

custom_view_menu.js使用以下内容在您的自定义包中创建一个名为 ie 的文件:

getRoute = function (item) {
  // if route is a Function return its result, else apply Router.path() to it
  return typeof item.route == "function" ? item.route() : Router.path(item.route);
}

Template.menuItem.helpers({
  itemClass: function () {
    var itemClass = "";
    var currentPath = Router.current().location.get().path;

    if (this.adminOnly) {
      itemClass += " item-admin";
    }
    if (getRoute(this) === currentPath || getRoute(this) === Meteor.absoluteUrl() + currentPath.substr(1)) {
      // substr(1) is to avoid having two "/" in the URL
      itemClass += " item-active";
    }
    if (this.label === Settings.get("defaultView") && currentPath === "/") {
      itemClass += " item-active";
    }
    if (this.itemClass) {
      itemClass += " "+this.itemClass;
    }

    return itemClass;
  }
});

它是从原始来源( https://github.com/TelescopeJS/Telescope/blob/master/packages/telescope-core/lib/client/templates/menu/menu_component.js )复制的必需品,并添加了以下内容:

if (this.label === Settings.get("defaultView") && currentPath === "/") {
  itemClass += " item-active";
}

我希望它会对某人有所帮助,而且我不是唯一一个尝试这样做的人:)

于 2015-06-06T11:50:19.307 回答