我对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
之类的路线时,这些陈述不会被执行。实际上,没有渲染模板。
有人可以解释这种行为吗?我需要做些什么才能让用户看到相同的内容,无论他是直接访问此路线还是从其他路线转换?
答案 0 :(得分:1)
假设您使用ember.js rc6引入了一些基本更改,即(router facelift),此行为正在同步化。有关详细信息,请查看here。
取自文档的说明
路由器的先前迭代暴露了一个名为redirect的钩子,它让你有机会转换到另一条路径,从而中止当前的转换尝试。 问题在于,当涉及异步数据时,transitionTo / linkTo行为与URL导航行为之间的行为非常不同,并且不易预测。
但现在它们是同步的,应该产生相同的行为。
希望它有所帮助。
答案 1 :(得分:0)
我不知道我是否理解正确,但据我所知,如果您转到此链接/#/path/abc
,您需要确保resource
与id
{{ 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所说的,曾经存在一些差异,但是对于最新版本的路由器,这应该是默认行为。换句话说,你根本不需要做任何事情。