我创建了我的第一个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'});
});
答案 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
}
});