【问题标题】:what is @params in Iron:routerIron:router 中的@params 是什么
【发布时间】:2014-09-20 02:38:25
【问题描述】:

使用流星的 IronRouter,我试图在其他地方使用 this.params 对象,但对它是什么感到困惑。它看起来是一个零长度数组,实际上是一个在路径组件之后具有命名方法的对象。

# coffee
@route 'magnets',
  path: '/magnets/lesson/:lessonCname'

  data: ->
    if @ready()
      debugger;
      console.log("route.params", @params)

使用此代码,我将在调试控制台中获得:

this.params
[]
this.params.lessonCname
"despite-magnets-01"
typeof(this.params)
"object"
this.params.length
0
this.ready()

但是在将 params 对象传递给服务器方法时,方法(即“lessonCname”)消失了。

如果我的理解是正确的,那么近期的问题是将这些方法检索/转换为 {property:value} 以便它们可以被序列化并传递给服务器调用的最佳方法是什么?

【问题讨论】:

    标签: meteor iron-router


    【解决方案1】:

    有两种简单的方法可以解决您的问题,您可以在数据范围内设置一个全局变量(但这被认为是不好的做法,至少在 IMO),或者您可以使用“data”函数,该函数返回当前模板的数据上下文:

      data: ->
            window._globalscopedata = @params.whatever        #setting global variable
            return someCollection.findOne                     #returns data context
                _id: @params.whatever 
    

    在处理这条路线时,我将拥有 _globalscoredata 中可用的任何参数,并且我的文档在模板上下文中可用。

    【讨论】:

      【解决方案2】:

      查看the source code 以从路径中检索参数。 params 是一个数组,但可能具有命名属性。要遍历所有内容,您可以使用 for in 循环:

      for(var x in myArray){
          // Do something.
      }
      

      通过这种方式,您可以将所有内容复制到新对象(可能有更简单的方法来创建副本)。

      【讨论】:

        【解决方案3】:

        附加到RouteController 的 params 属性是具有以下属性的对象:

        • hash : URL 哈希值。
        • query : 由表示查询字符串的键/值对组成的对象。
        • 包含名称和实际值的 URL 片段列表。

        让我们举个例子,这个路由定义:

        // using iron:router@1.0.0-pre2 new route definition
        Router.route("/posts/:slug");
        

        在浏览器地址栏中输入这个网址:/posts/first-post#comments?lang=en

        我们可以使用控制台准确找出参数实际包含的内容:

        > Router.current().params
        

        这会显示这个结果:

        Object {
          hash: "comments",
          slug: "first-post",
          query: {
            lang: "en"
          }
        }
        

        这里 slug 已经是 params 对象的一个​​属性,其值为“first-post”,这不是一个方法。

        如果您想从 params 中提取这些 URL 片段作为键/值对的对象,可以使用下划线 omit :

        // getting rid of the hash and the query string
        var parameters=_.omit(this.params,["hash","query"]);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-04-18
          • 1970-01-01
          • 2023-03-03
          • 2012-11-10
          • 1970-01-01
          • 1970-01-01
          • 2017-10-13
          • 2013-02-20
          相关资源
          最近更新 更多