1

我尝试了两种方法。首先是定义一个具有相同模式的新路由,但它给我错误说“路径已经存在”。

然后我也尝试RouteController从路由器中获取现有并更改它,但它并不顺利

具体来说,我试图覆盖项目望远镜中的以下路线。

https://github.com/TelescopeJS/Telescope/blob/master/packages/telescope-posts/lib/routes.js#L159-L162

4

2 回答 2

1

一种方法是修改现有的路线选项。

// Running it in Meteor.startup is only necessary because Telescope
// defines the route at startup
Meteor.startup(function () {
  // Find a route by name
  var route = Router.routes.posts_default;
  // OR find a route by path
  var route = Router.findFirstRoute('/');

  // Override existing route options
  _.extend(route.options, {
    data: //...
    // Other route options...
  });
});

另一种方法是删除路由并重新创建它。

使用通过名称删除路由的函数,

function removeRouteByName (routeName) {
  var routes = Router.routes;
  var route = routes[routeName];
  if (!route) return false;  // Returns false if route is not found

  // Remove route from Router
  delete routes[routeName];
  delete routes._byPath[route.path()];
  var routeIndex = routes.indexOf(route);
  if (routeIndex >= 0) routes.splice(routeIndex, 1);

  // Remove route handler from MiddleWareStack
  delete Router._stack._stack[routeName];
  Router._stack.length -= 1;

  return true;  // Returns true when route is removed
}

我们可以通过以下方式删除并重新创建路线

// Running it in Meteor.startup is only necessary because Telescope
// defines the route at startup
Meteor.startup(function () {
  removeRouteByName('posts_default');

  Router.route('/', {
    name: 'posts_default',  // Use the same name
    //Add your parameters...
  });
});

尝试在此存储库中运行 Telescope ,您应该会看到路由/已更改。

于 2015-07-01T01:43:07.583 回答
0

使用onBeforeAction钩子可以完成这项工作,尽管不是最好的方法。

Router.onBeforeAction(function () {
  if (Router.current().route.getName()==="posts_default") {
    this.render("posts_list_controller", {
      data: {
        terms: { // Telescope specific view data
          view: 'another_view',
          limit: 10
        }
      }
    });
  } else {
    this.next();
  }
});
于 2015-07-01T02:15:09.793 回答