我使用最新的ember.js(0.9.8.1)通过引用Ember Router not updating url in Chrome and Safari实现了以下内容。当我尝试通过router.transitionTo('route path')方法(附加片段的最后3行)切换黑白路由时,浏览器网址未正确更新,但我确实看到视图标记正在更新,确认状态更改执行发生。可以帮助确定我是否遗漏了一些东西吗?
BTW:我在Chrome 20.0.1132.27 beta-m
中对此进行了测试App = Ember.Application.create({});
App.IndexView = Ember.View.extend({
template: Ember.Handlebars.compile(
'hello world from index'
)
});
App.ShowView = Ember.View.extend({
template: Ember.Handlebars.compile(
'hello world from show'
)
});
App.Router = Ember.Router.extend({
location: 'hash',
enableLogging: true,
root: Ember.State.extend({
index: Ember.State.extend({
route: '/',
redirectsTo: 'tasks'
}),
tasks: Ember.State.extend({
route: '/tasks',
index: Ember.ViewState.extend({
route: '/',
view: App.IndexView
}),
show: Ember.ViewState.extend({
route: '/show',
view: App.ShowView
})
})
})
});
var router = App.Router.create({});
App.initialize(router);
router.transitionTo('root');
router.transitionTo('root.tasks');
router.transitionTo('root.tasks.show');
答案 0 :(得分:2)
我运行了你的代码,在控制台中,我有以下错误"对象哈希没有方法' setURL'"。通过调试一点,我发现你必须用:
定义路由器的位置location = Ember.Location.create({ style: 'hash' })
或
location = Ember.Location.create({implementation: 'hash'})
我不知道究竟是为什么,但似乎有效。也许这只是因为ember版本。
答案 1 :(得分:0)
你正在混合2种初始化方法。
当您定义App.Router时,您需要做的就是调用App.initialize()。它会自动创建Ember.Router的实例并将其分配给变量App.stateManager。然后,您可以使用App.stateManager来调用transitionTo。
您可以定义变量路由器以扩展Ember.Router,然后调用App.initialize(路由器)。此方法还会创建Ember.router的实例并将其分配给App.stateManager。然后,您可以使用App.stateManager来调用transitionTo。
这两种方法都可以使用,但我更喜欢方法1.要操纵路线,我们总是使用App.stateManager。