Ember.js中的多个嵌套路由具有奇怪的行为

时间:2014-06-11 01:05:49

标签: ember.js

我从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'});
            });
        });
    });

因此路由名称将自动嵌套(不需要点表示法),但这不起作用。任何有琥珀智慧的人都能为我发光吗?

1 个答案:

答案 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意味着当前范围的属性。

示例:http://emberjs.jsbin.com/OxIDiVU/637/edit