我从Ember.js开始,我有一个三级路线,其中一个页面。这就是路由器映射的样子:
App.Router.map(function(){
this.resource('tests');
this.resource('create', function() {
this.resource('create.questions', {path: ':test_id' }, function() {
this.resource('create.questions.question', {path: ':question_id'});
});
});
});
在我的CreateRoute中,我使用以下代码转换到创建/问题路线:
this.get('controller').transitionToRoute('create/questions', test);
哪种方法很好,但在我的CreateQuestionsRoute中,这段代码不起作用:
this.get('controller').transitionToRoute('create/questions/question', question);
收到的错误:
Uncaught Error: Assertion Failed: Error: Assertion Failed: The route create/questions/question was not found
使用Chrome Ember检查器插件,我可以看到路由列出如下:
CreateRoute
CreateQuestionsRoute
CreateQuestions.QuestionRoute
这似乎是任意行为。关于如何处理多个嵌套路由没有太多指导。一些参考文献告诉我,我的路线图应该看起来像这样:
App.Router.map(function(){
this.resource('tests');
this.resource('create', function() {
this.resource('questions', {path: ':test_id' }, function() {
this.resource('question', {path: ':question_id'});
});
});
});
因此路由名称将自动嵌套(不需要点表示法),但这不起作用。任何有琥珀智慧的人都能为我发光吗?
答案 0 :(得分:1)
坚持下去:
App.Router.map(function(){
this.resource('tests');
this.resource('create', function() {
this.resource('questions', {path: ':test_id' }, function() {
this.resource('question', {path: ':question_id'});
});
});
});
添加资源名称空间的唯一原因是资源不是唯一的。这意味着您可以使用任何路线
this.transitionTo('questions', model);
this.transitionTo('question', modelForQuestions, modelForQuestion);
示例:http://emberjs.jsbin.com/OxIDiVU/636/edit
如果你想保留你的命名空间,我会选择camelCase而不是点符号,因为一般来说dot意味着当前范围的属性。