支持流星和铁路由器中具有嵌套属性的多个参数

Supporting multiple parameters with nested properties in Meteor and Iron Router

本文关键字:属性 嵌套 参数 流星 路由器 支持      更新时间:2023-09-26
使用

Meteor 和 Iron Router,我创建了使用多个参数的动态页面路径。但是,如果我尝试访问路径中的嵌套/子属性,路由会中断。这些帖子很有帮助,但没有涉及子属性:
具有多个参数的铁路由器嵌套路由
流星铁路由器嵌套路由

铁路由器

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',


有没有办法在不破坏铁路由器的情况下引用嵌套属性?

---编辑---

对于更实际的示例:

// 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"

在你的路由中,如果你想使用它,你需要从 params 对象中获取 :foo:

var foo = this.params.foo;

现在有点太晚了,但无论如何,有人可能会受益。我通过以下方式解决了它:

定义

嵌套路径(顺便说一句,以这种方式定义路径对 SEO 更好)

 <a href="/user/{{owner.id}}/playlist/{{id}}"> Content </a>

路由器

this.route('playlistItem', {
  path: '/user/:owner/playlist/:playlist',
  onBeforeAction: function() {
    // You can get your params 
    var ownerId = this.params.owner
    var playlistId = this.params.playlist
    // execute some code
  },
});