【发布时间】:2015-03-06 01:06:27
【问题描述】:
使用 Meteor 和 Iron Router,我创建了使用多个参数的动态页面路径。但是,如果我尝试访问路径中的嵌套/子属性,则路由会中断。这些帖子很有帮助,但没有解决子属性:
Iron-router nested routes with multiple parameters
meteor iron-router nested routes
铁路由器
this.route('location',{
path: '/properties/:foo/:_id',
waitOn: function(){
return Meteor.subscribe('properties', this.params._id);
},
action: function(){
this.render('propertyPage', {
data: function(){
return Properties.findOne(this.params._id);
}
});
}
});
标记(作品)
<a href="{{pathFor 'location' foo=bar }}">Click Me</a>
尝试在标记中引用嵌套属性时,它会中断:
标记(不工作)
<a href="{{pathFor 'location' foo=bar.nestedChild }}">Click Me</a>
我也在 javascript 中尝试过,但没有成功:
path: '/properties/:foo.nestedChild/:_id',
有没有办法在不破坏 Iron Router 的情况下引用嵌套属性?
- - - 编辑 - - -
举个更实际的例子:
// data context from route action (Properties.findOne(this.params._id))
property = {
_id: "3cu7B8b6K3EzCgYnQ"
address: {
city: 'Houston',
state: 'TX',
zip: 77006,
lat: null,
lng: null
},
images: ['img1.png', 'img2.png', 'img3.png'],
schools: [
{ grade:'elementary', name:'Haude', rating:4 },
{ grade:'middle', name:'Strauke', rating:5 },
{ grade:'high', name:'Klein', rating:3 },
]
}
我正在尝试构建一个这样的 url 架构:
path: '/properties/:address.city/:address.state/:address.zip/:_id'
或在示例中:
"/properties/Houston/TX/77006/3cu7B8b6K3EzCgYnQ"
【问题讨论】:
-
请您解释一下为什么需要嵌套属性。从您提供的示例中我不清楚。谢谢。
-
“为什么”是因为我正在使用属性集合内的复杂 JSON 模式。例如,我需要访问一个名为“address”的对象的嵌套属性,该对象有一堆孩子,如“city、zip、state 等”。
-
也许我遗漏了一些东西,但您似乎可以查找“地址”对象的 _id,然后像 中那样简单地取消引用它们的属性address.city、address.zip 等。我想我错过了它们是如何嵌套的。如果你能提供一个数据样本,那可能会填补一个缺失的部分。
-
嘿芯片,我添加了一个更实际的例子来说明我想要实现的目标。
-
从我收集的信息来看,它似乎并不经常在 Iron-router 中完成。查看github.com/EventedMind/iron-router/issues/337 后,您可能会有更好的见解。我建议通过查找 _id 来简化它,或者如果这太难看,在你的路由中使用 :slug 参数来支持类似的东西(例如, /properties/:slug 其中 :slug 可能是 Houston-TX-77006 或一些变体。
标签: javascript html meteor routing iron-router