Emberjs pre4嵌套路由默认URI

时间:2013-02-08 08:08:09

标签: ember.js

有人可以解释为什么嵌套资源需要列出路由名称中的路径层次结构而不仅仅是路由?

EG。 resource1> resource1.resource2

Emberjs似乎都是为了减少代码量。是否有一些用于资源的用例我没有看到哪个解释了为什么应该以这种方式定义资源。

我无法让我的例子在jsfiddle或jsbin中工作,所以我在这里托管了它:http://emberjs.mattmazzola.net/

我的解决方案基于此类似StackOverflow问题中描述的技术,我在这里:Ember.js pre4 multiple nested routing

基本上,你注意到我有一个资源'动物',子资源'猫'和'狗'。但是,如果我只是将它们命名为“猫”和“狗”,路由器会说“找不到路线动物。”然后如果我添加'动物'。使嵌套路由'animals.cats'的前缀成为索引#/ animals / animals.cats,这是没有意义的。当然我们通过覆盖路径属性来解决这个问题,但我不明白为什么Emberjs不会t默认情况下这样做。我是否错误地定义了我的资源/路线,这是一个副作用?

换句话说,我现在正在这样做:

App.Router.map(function() {
    this.resource('products', function() {
        this.route('desktops');
        this.route('laptops');
    });
    this.resource('animals', function() {
                // the url for this route is bad, but default behavior?
        this.resource('animals.cats', function() {
            this.route('cat', {path: ':cat_id'});
        });
        // Why does this require stating the parent route 'animals' again?
        this.resource('animals.dogs', {path: 'dogs/'}, function() {
            this.route('dog', {path: ':dog_id'});
        });
    });

});

如何编写这样的路线:

App.Router.map(function() {
    this.resource('products', function() {
        this.route('desktops');
        this.route('laptops');
    });
    this.resource('animals', function() {
        this.resource('cats', function() {
            this.route('cat', {path: ':cat_id'});
        });
        this.resource('dogs', function() {
            this.route('dog', {path: ':dog_id'});
        });
    });
});

1 个答案:

答案 0 :(得分:0)

嗯,我认为如果您正确定义App.AnimalsIndexRouteApp.CatsIndexRouteApp.DogsIndexRoute(可能还有其他一些Ember.Routes),第二个版本应该可以正常工作。如果你还有这个问题,你可以在这里或在jsfiddle中发布你的其余代码吗?