我尝试了两种方法。首先是定义一个具有相同模式的新路由,但它给我错误说“路径已经存在”。
然后我也尝试RouteController
从路由器中获取现有并更改它,但它并不顺利
具体来说,我试图覆盖项目望远镜中的以下路线。
我尝试了两种方法。首先是定义一个具有相同模式的新路由,但它给我错误说“路径已经存在”。
然后我也尝试RouteController
从路由器中获取现有并更改它,但它并不顺利
具体来说,我试图覆盖项目望远镜中的以下路线。
一种方法是修改现有的路线选项。
// 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 ,您应该会看到路由/
已更改。
使用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();
}
});