0

ルーティング階層が必要です。したがって、「#/user/123」および「#/user/123/albums」という URL が機能するとよいでしょう。そして、私はそれをこのようにしたい:

App.Router = Em.Router.extend({
  root: Em.Route.extend({
    index: Em.Route.extend({
      route: '/'
    }),
    user: Em.Route.extend({
      route: '/user/:login',
      connectOutlets: function(router, context){
        router.get('applicationController').connectOutlet('user', context);
      },
      albums: Em.Route.extend({
        route: '/albums',
        connectOutlets: function(router){
          router.get('applicationController').connectOutlet('albums');
        }
      })
    })
  })
});

この方法ではありません:

App.Router = Em.Router.extend({
  root: Em.Route.extend({
    index: Em.Route.extend({
      route: '/'
    }),
    user: Em.Route.extend({
      route: '/user/:login',
      connectOutlets: function(router, context){
        router.get('applicationController').connectOutlet('user', context);
      }
    }),
    albums: Em.Route.extend({
      route: '/user/:login/albums',
      connectOutlets: function(router){
        router.get('applicationController').connectOutlet('albums');
      }
    })
  })
});

私の最初のコード例は愚かであるが、ルーティング階層が欲しい。そんな能力あるの!?

4

1 に答える 1

1

この種のことは確かに実行可能です。ネストされたルートの例はたくさんあります。特定のルーターを実際のアプリと照合することはできませんが、 Ember Application Structure guideには、この行に非常に長い例があります。ネスティングのセクションを参照してください。あなたはこれを見つけるでしょう:

post: Ember.Route.extend({
  route: '/posts/:post_id',
  connectOutlets: function(router, post) {
    router.get('applicationController').connectOutlet('post', post);
  },
  index: Ember.Route.extend({
    route: '/',
    redirectsTo: 'comments'
  }),
  comments: Ember.Route.extend({
    route: '/comments',
    showTrackbacks: Ember.Route.transitionTo('trackbacks'),
    connectOutlets: function(router) {
      var postController = router.get('postController');
      postController.connectOutlet('comments', postController.get('comments'));
    }
  }),
  trackbacks: Ember.Route.extend({
    route: '/trackbacks',
    showComments: Ember.Route.transitionTo('comments'),
    connectOutlets: function(router) {
      var postController = router.get('postController');
      postController.connectOutlet('trackbacks', postController.get('trackbacks'));
    }
  })
})
于 2012-10-17T19:44:15.587 に答える