【问题标题】:EmberJS - Nested Routes/ResourcesEmberJS - 嵌套路由/资源
【发布时间】:2014-12-08 13:38:40
【问题描述】:

假设我希望我的应用程序所需的 URL 是:

  • domain.com/A/:aID
  • domain.com/A/:aID/B/:bID
  • domain.com/A/:aID/B/:bID/C?param1:123

每个状态都将是一个完全不同的视图/模板。

我目前拥有的基本代码是:

this.resource('A', { path: 'A/:id' }, function () {
    this.resource('A.B', { path: 'B/:id' }, function () {
        this.route('A.B.C');
    }
}

这是实现此目的的正确方法吗?有没有更好的办法?

【问题讨论】:

    标签: ember.js routes ember-router


    【解决方案1】:

    你的路由声明应该只是C,而不是A.B.C。资源不会保留其父上下文,但路由会保留。如果需要,您还可以使用嵌套路由而不是嵌套资源。

    this.route('A', { path: 'A/:id' }, function () {
        this.route('B', { path: 'B/:id' }, function () {
            this.route('C');
        }
    }
    

    除此之外,我认为你的方法会很好用。

    【讨论】:

    • 谢谢!一个跟进。假设我在 B 或 C 上,我想要一个“后退”按钮让用户回到以前的状态,我不想使用 window.history(-1),我该怎么做?
    • 我想您想这样做,以便您可以将用户带回上一页而无需返回浏览器历史记录?我认为像window.history.replaceState(window.history.previous) 这样的东西可能会起作用。 (发现于history property documentation。)
    • 我如何在 B 视图上使用来自 A 的模型通过 {{link-to}} 做到这一点?
    • 说实话,我不确定你会怎么做。我想您必须存储上次访问的路线和模型,然后自己放入 link-to 助手中。
    猜你喜欢
    • 2013-03-02
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2011-05-23
    • 1970-01-01
    相关资源
    最近更新 更多