使用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}的最佳方法是什么,以便将它们序列化并传递给服务器调用?
答案 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属性是具有以下属性的对象:
让我们举一个例子,为这个路线定义:
// 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.
}
通过这种方式,您可以将所有内容复制到新对象(可能有一种更简单的方法来创建副本)。