2

我使用最新的 ember.js (0.9.8.1) 通过引用Ember Router not updates url in Chrome and Safari实现了以下内容。当我尝试通过 router.transitionTo('route path') 方法(附加代码段的最后 3 行)切换黑白路由时,浏览器 url 未正确更新,但我确实看到视图标记正在更新,确认状态更改确实发生。可以帮助确定我是否在这里遗漏了什么吗?

顺便说一句:我在 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');
4

2 回答 2

2

我运行了您的代码,在控制台中出现以下错误“对象哈希没有方法'setURL'”。通过调试,我发现您必须使用以下方式定义路由器的位置:

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

或者

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

我不知道究竟为什么,但它似乎工作。也许这只是由于 ember 版本。

于 2012-06-11T09:57:34.857 回答
0

您正在混淆 2 种初始化方法。

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

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

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

于 2012-06-08T03:09:52.697 回答