【问题标题】:ember-routemanager not responding to set('location', '...')ember-routemanager 没有响应 set('location', '...')
【发布时间】:2012-04-20 00:33:54
【问题描述】:

我有一个尝试使用ember-routemanager 的应用程序。 (我使用rake-pipeline 作为我的构建环境,但我认为这无关紧要。或者是吗?)问题是,该应用似乎忽略了位置栏中的路线。

This jsfiddle 显示状态管理器正确设置并进入入口状态。两秒半后,脚本运行App.stateManager.set('location', 'desktop');,根据 ember-routemanager README 应该将我移动到以“桌面”作为其路由参数的状态(对吗?)。但事实并非如此。

(这是我在 jsfiddle 中克隆问题的最接近的方法,我无法轻易在位置栏中放置路径。当我在我的开发环境中这样做时,例如 http://localhost:9292/desktophttp://localhost:9292/#desktop ,很明显应用程序没有使用路径;它返回“找不到实体:/desktop”。)

请注意,another version of the same fiddle 使用 goToState 而不是设置 location 可以正常工作。

我做错了什么?


代码:

Sylvius.stateManager = Ember.RouteManager.create({

    initialState: 'launch',
    enableLogging: true,
    wantsHistory: true,

    launch: Em.ViewState.create({
        view: Sylvius.LaunchView,
    }),
    desktop: Em.ViewState.create({
        view: Sylvius.DesktopView,
        route: 'desktop',

        sectionSelected: Em.State.create({
            route: ':sectionSlug',

            enter: function(manager, transition) {
                console.log('We found the slug: ' + Sylvius.stateManager.getPath('params.sectionSlug'));
            }
        })

    })
});

【问题讨论】:

    标签: url-routing ember.js


    【解决方案1】:

    您正在为sectionSelected 状态定义类似/desktop/:sectionSlug 的路由。如果您调用Sylvius.stateManager.set('location', 'desktop/123');,那么它会按预期工作。

    如果您想要一个处理路由“/desktop”的状态,您必须创建一个没有route 属性的新状态,请参阅http://jsfiddle.net/pangratz666/NMgKH/

    index: Em.State.create({
        enter: function(manager, transition){
            this._super();
            console.log('invoked for /desktop');
        }
    })
    

    【讨论】:

    • 没错。 rlivesy 在 IRC 中向我指出了这一点,但他没有时间在这里发布。
    猜你喜欢
    • 2021-09-23
    • 2011-08-01
    • 2019-05-10
    • 1970-01-01
    • 2012-07-31
    • 2014-08-29
    • 2011-08-08
    • 2019-03-21
    • 2012-06-26
    相关资源
    最近更新 更多