2014-09-19 112 views
0

与流星的IronRouter,我试图用this.params反对其他地方,但困惑,它是什么。它似乎是一个零长度数组,它实际上是一个具有命名方法的对象,位于路径组件之后。什么是铁@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”)消失。

如果我的理解是正确的,那么短期的问题是什么是检索/这些方法转换成最佳的方式{属性:值}这样他们就可以被序列化并传递到服务器调用?

回答

0

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

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

等待处理这条路的时候,我会在_globalscoredata在模板上下文中可用的任何可用PARAM和我的文档。

0

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

  • 散列:所述URL的哈希值。
  • 查询:包括代表查询字符串的键/值对的对象。
  • 与他们的名字和实际值的网址片段的列表。

让我们举个例子,这条路线的定义:

// using iron:[email protected] 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"]); 
0

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

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

通过这种方式,你可以在一切复制到一个新的对象(有可能会创建一个副本更简单的方法)。