0

我对 Ember 的行为感到困惑。我有这段代码(在 CoffeeScript 中):

Terminal.Router.map () ->
  @resource('path', {path: '/path/:path'})

Terminal.PathRoute = Ember.Route.extend
  setupController: (controller, path) ->
    console.log "Breakpoint A"
  renderTemplate: () ->
    console.log "Breakpoint B"

当我从我的索引页面导航到这条路线时,两个打印语句都被执行。然而,当我直接去像这样的路线时/#/path/abc,这些语句不会被执行。实际上,没有渲染模板。

有人可以解释这种行为吗?我需要做什么才能使用户无论是直接访问该路线还是从另一条路线转换都能看到相同的内容?

4

3 回答 3

1

假设您使用的是ember.js rc6,它引入了一些基本的更改,也就是(路由器改款),这种行为被同步为相同的。在这里查看更多信息。

取自文档的注释

路由器的先前迭代暴露了一个称为重定向的钩子,它使您有机会转换到另一个路由,从而中止当前的转换尝试。这样做的问题是,当涉及异步数据时,transitionTo/linkTo 行为和 URL 导航行为之间的行为非常不同,并且不容易预测。

但是现在它们是同步的并且应该产生相同的行为。

希望能帮助到你。

于 2013-07-07T08:00:56.777 回答
0

当我从我的索引页面导航到这条路线时,两个打印语句都被执行。然而,当我直接转到 /#/path/abc 之类的路线时,这些语句不会被执行。实际上,没有渲染模板。有人可以解释这种行为吗?

没有更多信息无法解释。尝试将以下内容添加到您的应用程序中,以便您可以观看控制台并查看发生了什么。直接访问路由时观察输出 - 路由器是否正在转换到您期望的路由?该输出与您从索引页面点击链接时发生的情况相比如何?

var App = Ember.Application.create({
  LOG_TRANSITIONS: true,
  LOG_VIEW_LOOKUPS: true,
  LOG_ACTIVE_GENERATION: true
});

有关这些设置的说明,请参阅http://blog.emberwatch.com/2013/06/13/logging-the-magic-in-ember-js.html

我需要做什么才能使用户无论是直接访问该路线还是从另一条路线转换都能看到相同的内容?

就像@intuitivepixel 所说,曾经有一些差异,但是对于最新版本的路由器,这应该是默认行为。换句话说,您根本不需要做任何事情。

于 2013-07-08T02:23:51.147 回答
0

我不知道我是否正确理解您,但据我所知,如果您访问此链接/#/path/abc,您需要确保resourcewithid abc存在。

于 2013-07-07T07:46:56.373 回答