【问题标题】:Iron Router dynamic routes don't re-renderIron Router 动态路由不会重新渲染
【发布时间】:2026-01-30 15:15:01
【问题描述】:

我的路线如下所示:

@.route 'dailyTotal',
    path: '/report/:year/:month/:day'
    template: 'dailyTotal'
    layoutTemplate: 'report'
    data: ()-> this.params

在我的控制器中是这样的:

Template.dailyTotal.bevTable = ->
  params = this
  # a whole bunch more...

在控制器中,我使用这些参数来做一些与我的问题无关的相当复杂的事情,因为当您从一个动态路由导航到另一个动态路由时,这不会重新呈现(或执行?)。

例如,如果我从“/report/2014/05/21”导航到“/report/2014/05/22”,则没有任何反应。只有当您来自完全不同的路线(例如,“/report/totals”)时,该路线才会执行。

当我在控制器中放置一个断点时,它永远不会得到这个,但我看到数据函数中的参数发生了变化。我的直觉告诉我我需要以某种方式强制控制器动作运行,但从 IronRouter 或 Meteor 文档中都看不出来。有什么建议吗?

【问题讨论】:

    标签: javascript meteor iron-router


    【解决方案1】:

    我试图通过使用您在上面发布的路线创建简单的流星应用程序来重现您的问题,但没有运气,IronRouter 正确处理了这种情况。 请将您的代码与: https://github.com/parhelium/meteo-so-ironrouter-dynamic-routes

    IronRouter 正确检测到同一路由中的参数变化,所以先到 /report/2014/05/21 然后再到 /report/2014/05/21 > 正确重新渲染模板。

    应用程序结构是使用em 工具生成的,它生成了很多目录和文件,但在这种情况下只有少数是重要的:

    both/router/routes.js
    client/controllers/report.js
    client/views/report/*
    

    更新

    当您通过控制器中的data 字段传递this.params 时,您的路由模板中的用法是:

    {{year}}/{{month}}/{{day}}
    

    【讨论】:

    • 感谢您的帮助!我有一些不同,所以我尝试了一个实验来使我的代码和结构与你的匹配。
    • 嘎。我的问题的解决方案只是在 data() 挂钩中设置一个 Session var。我太傻了,忽略了....
    • @jasongonzales:我遇到了同样的问题。您能否详细说明在 data() 挂钩中设置会话变量如何解决该问题?谢谢!
    • 欧文,这可能不适用于你正在做的事情,但请随时查看我的回购:github.com/jasongonzales23/inventoryapp。我不记得细节了,因为我写得很快,而且已经有一段时间了,但看起来我只是设置了一个会话 var 来通过 data() 钩子获取我需要的数据。
    最近更新 更多