【问题标题】:meteor iron-router and getting the names of all routes for the accounts-entry packagemeteor Iron-router 并获取 accounts-entry 包的所有路由的名称
【发布时间】:2015-02-21 21:16:30
【问题描述】:

流行的accounts-entry 包中有一个与铁路由器相关的错误。我相信 Iron-router 的更高版本更改为更好地用作中间件,因此请致电Router.routes

file 的第 87 行使用了以下代码:

_.each Router.routes, (route)->
  exclusions.push route.name
# Change the fromWhere session variable when you leave a path
Router.onStop ->
  # If the route is an entry route, no need to save it
  if (!_.contains(exclusions, Router.current().route?.getName()))
    Session.set('fromWhere', Router.current().path)

不幸的是,在 Router.routes 上执行 _.each 似乎不再是一种可行的解决方案,因为 Router.routes 不会返回并带有 .name 属性的对象。

最新的iron-router如何获得所有路线的名称?

【问题讨论】:

    标签: meteor routing iron-router middleware


    【解决方案1】:

    这个有点棘手:在最新版本的iron:router 中,Router.routes 现在被定义为一个函数数组。

    事实上,函数在 JS 中已经有一个默认的 name 属性,其中包含函数在定义时分配的名称。

    var myFunc = function funcName(){...};
    console.log(myFunc.name); // == "funcName"
    

    幸运的是,在数组的路由项上定义了一个getName 方法,您可以使用这段代码遍历所有路由并获取它们的名称:

    _.each(Router.routes, function(route){
      console.log(route.getName());
    });
    

    【讨论】:

    • 好的,所以看起来我原来的每个函数都可以工作,我只需要 route.getName() 而不是 route.name ...我对它返回的函数数组的一个困难是计算了解如何正确使用它。你知道有人会如何检查函数的实例以查看其中可用的方法吗?例如。如果我做 Router.routes[0] 它返回第一个函数,如果我做 Router.routes[0]() 它无效,那么我怎么知道 Router.routes[0].getName() 甚至是可能的?
    • 您可以打开浏览器控制台并输入for(var prop in Router.routes[0]){console.log(prop);},我会在一分钟内找到最佳解决方案。
    • 啊,漂亮,有一天我可能不必问愚蠢的问题,但现在,非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2015-02-27
    相关资源
    最近更新 更多