什么是@params in Iron:路由器

时间:2014-09-19 17:09:50

标签: meteor iron-router

使用meteor的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}的最佳方法是什么,以便将它们序列化并传递给服务器调用?

3 个答案:

答案 0 :(得分:0)

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

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

当处理此路线时,我将在_globalscoredata中提供任何可用的参数,并且我的文档可在模板上下文中使用。

答案 1 :(得分:0)

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

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

让我们举一个例子,为这个路线定义:

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

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

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

> 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"]);

答案 2 :(得分:0)

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

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

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