Ember路由器问题

时间:2013-11-21 22:07:52

标签: ember.js routing

我创建了我的第一个Ember应用程序并且遇到了一个路由问题。我有一个显示此类路线模型的模板:

this.resource('collection', {path: '/collection/:collection_id'});

当网址中有id时,页面会重新加载。但是当collection_id不再可用且url变为如下时,我有一种基于用户交互的情况:

http://localhost:8080/discover/index.html#/collection/

但如果我重新加载此页面,我会收到错误:

'Assertion failed: The URL '/collection/' did not match any routes in your application'

我想解决这个问题,我想如果我能抓住这个状态并为此做类似的事情:

this.transitionTo('home');

在我的应用程序中有意义。问题是我该怎么做。如果有人知道如何做到这一点,我们非常感谢您的帮助。

我的路由器看起来像这样:

App.Router.map(function(){
        this.resource('home', {path: '/'});
        this.resource('admin', function(){
            this.route('user');
            this.route('storage');
        });
        this.resource('help');
        this.resource('collection', {path: '/collection/:collection_id'});
});

3 个答案:

答案 0 :(得分:0)

可能有效,我无法在jsfiddle中快速测试,因为您无法直接设置锚点:

App.CollectionIndexRoute = Ember.Route.extend({
  redirect: function(){
    this.transitionTo('home');        
  }
});

答案 1 :(得分:0)

从你的问题中摘录:

  

但是当collection_id不再可用且url变为如下时,我的情况基于用户交互:

上面的答案(Michael Johnston)应该解决你的问题,但我的问题是为什么(或什么时候)collection_id不再可用? collection_id变得不可用的事实听起来像问题本身......

请告诉我更多......

答案 2 :(得分:0)

'Assertion failed: The URL '/collection/' did not match any routes in your application'

我认为,

出现了,因为路由器中实际上没有指定这条确切的路由。

如果你像这样嵌套路线,迈克尔约翰斯顿添加a的例子就可以了:

App.Router.map(function() {
    this.resource('collection', function() {
        this.route('show', { path: ':collection_id' }); 
    });
});

该路线将是

App.CollectionIndexRoute = Ember.Route.extend({});

App.CollectionShowRoute = Ember.Route.extend({
    model: function(params) {
        // do the i/o for the collection here
    }
});