【问题标题】:Emberjs Router: state does not change when the url hash is changedEmberjs路由器:更改url哈希时状态不会改变
【发布时间】:2012-06-01 03:19:12
【问题描述】:

Emberjs 核心有一个新的路由器实现,它扩展了 Ember.StateManager。 这是我目前实现的基本路由器(使用coffeescript):

Emee.set "stateManager", Ember.Router.create
    location: "hash"
    enableLogging: true

    start: Ember.State.extend
        index: Ember.State.extend
            route: "/"
            connectOutlets: (manager) ->
                console.log(manager)

        tasks: Ember.State.extend
            route: "/tasks"

            index: Ember.State.extend
                route: "/"

            show: Ember.State.extend
                route: "/show"

        users: Ember.State.extend
            route: "/users"

            index: Ember.State.extend
                route: "/"

Emee 是我的 Ember 命名空间。我有几个问题:

1) 当一个页面加载一个带有哈希http://localhost:3000/#tasks 的 url 时,它会移动到正确的 start.tasks.index 状态,但在 hashChange 上它只是向当前状态的 routePath 发送一条消息。 Emee.stateManager.route("/tasks") 也做同样的事情。它不会改变状态,而是向当前状态的 routePath 发送消息。我们需要自己实现 routePath 吗?如果不是,我们如何通过提供路由来改变状态?

2) 我看到在进入状态时调用哪个函数有很多变化。截至目前,“connectOutlets”似乎是进入状态时调用的函数的名称。现在这是设置控制器的正确页面吗?

更新

将 ember 代码更新为最新版本。我的路由器现在看起来像这样:

Emee.Router = Ember.Router.extend
    location: "hash"
    enableLogging: true

    root: Ember.State.extend
        index: Ember.State.extend
            route: "/"
            redirectsTo: 'tasks.index'

        tasks: Ember.State.extend
            route: "/tasks"

            index: Ember.State.extend
                route: "/"
                connectOutlets: (manager) ->
                    console.log("in index");

            show: Ember.State.extend
                route: "/show"
                connectOutlets: (manager) ->
                    console.log("in show");

        users: Ember.State.extend
            route: "/users"

            index: Ember.State.extend
                route: "/"

Emee.initialize()

浏览器的前进和后退按钮仍然不起作用。他们调用routePath,它只是返回,因为它们都是叶节点。我想我错过了一些小东西,但我无法找到它。

【问题讨论】:

  • 找到了解释 ember 工作流程的要点:gist.github.com/2728699 将相应地更新我的应用程序并发布结果。

标签: javascript ember.js ember-old-router


【解决方案1】:

这似乎是路由器当前实现中的一个错误 查看开发人员在https://github.com/emberjs/ember.js/issues/887#issuecomment-5946213 留下的评论以了解解决方法。

【讨论】:

    【解决方案2】:

    终于搞定了 :) 从 0.9.8.1 开始,我们需要调整 https://github.com/emberjs/ember.js/issues/887#issuecomment-5946213 提供的解决方法。修复如下,在创建 Ember.Location 对象时将“实现”更改为“样式”。

    Ember.Application.reopen({
      setupStateManager: function(stateManager) {
        var location = Ember.get(stateManager, 'location');
    
        if (typeof location === 'string') {
          location = Ember.Location.create({style: location});
          Ember.set(stateManager, 'location', location);
        }
    
        stateManager.route(location.getURL());
        location.onUpdateURL(function(url) {
          stateManager.transitionTo('root');
          stateManager.route(url);
        });
      }
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-25
      • 2016-04-15
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 2015-05-16
      • 2019-05-20
      • 2018-09-04
      相关资源
      最近更新 更多