Ember.Router的转换不更新URL

时间:2012-06-07 21:06:35

标签: ember.js ember-old-router

我使用最新的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');

2 个答案:

答案 0 :(得分:2)

我运行了你的代码,在控制台中,我有以下错误"对象哈希没有方法' setURL'"。通过调试一点,我发现你必须用:

定义路由器的位置
location = Ember.Location.create({ style: 'hash' }) 

location = Ember.Location.create({implementation: 'hash'})

我不知道究竟是为什么,但似乎有效。也许这只是因为ember版本。

答案 1 :(得分:0)

你正在混合2种初始化方法。

  1. 当您定义App.Router时,您需要做的就是调用App.initialize()。它会自动创建Ember.Router的实例并将其分配给变量App.stateManager。然后,您可以使用App.stateManager来调用transitionTo。

  2. 您可以定义变量路由器以扩展Ember.Router,然后调用App.initialize(路由器)。此方法还会创建Ember.router的实例并将其分配给App.stateManager。然后,您可以使用App.stateManager来调用transitionTo。

  3. 这两种方法都可以使用,但我更喜欢方法1.要操纵路线,我们总是使用App.stateManager。