当我直接访问URL时会发生什么?

时间:2013-07-07 07:08:50

标签: ember.js

我对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之类的路线时,这些陈述不会被执行。实际上,没有渲染模板。

有人可以解释这种行为吗?我需要做些什么才能让用户看到相同的内容,无论他是直接访问此路线还是从其他路线转换?

3 个答案:

答案 0 :(得分:1)

假设您使用ember.js rc6引入了一些基本更改,即(router facelift),此行为正在同步化。有关详细信息,请查看here

取自文档的说明

  

路由器的先前迭代暴露了一个名为redirect的钩子,它让你有机会转换到另一条路径,从而中止当前的转换尝试。 问题在于,当涉及异步数据时,transitionTo / linkTo行为与URL导航行为之间的行为非常不同,并且不易预测。

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

希望它有所帮助。

答案 1 :(得分:0)

我不知道我是否理解正确,但据我所知,如果您转到此链接/#/path/abc,您需要确保resourceid {{ 1}}存在。

答案 2 :(得分: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所说的,曾经存在一些差异,但是对于最新版本的路由器,这应该是默认行为。换句话说,你根本不需要做任何事情。