【问题标题】:Ember.Router's transitionTo not updating URLEmber.Router 过渡到不更新 URL
【发布时间】:2012-06-07 21:06:34
【问题描述】:

我通过引用Ember Router not updating url in Chrome and Safari 使用最新的 ember.js (0.9.8.1) 实现了以下内容。当我尝试通过 router.transitionTo('route path') 方法(附加 sn-p 的最后 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');

【问题讨论】:

    标签: ember.js ember-old-router


    【解决方案1】:

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

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

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

    我不知道究竟是为什么,但它似乎有效。可能只是ember版本的原因吧。

    【讨论】:

      【解决方案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。

      【讨论】:

      • 我尝试了您建议的两个选项,但看起来 App.stateManager 没有被初始化,即 App.stateManager 始终未定义。
      • 这真的很奇怪。能不能用this example作为参考,试一试。
      • 有趣...当我在网站上查看您的小提琴时,它工作得很好。当我复制您的代码时,它会失败并显示“无法找到模板“mainApp””错误。我什至改用最新的而不是显式的 0.9.8.1。想法?
      猜你喜欢
      • 2011-08-27
      • 1970-01-01
      • 2020-09-09
      • 2017-03-02
      • 1970-01-01
      • 2015-06-22
      • 2017-05-01
      • 2013-07-15
      • 1970-01-01
      相关资源
      最近更新 更多