如何在ember.js中使用多个路由器对象

时间:2012-09-05 10:28:10

标签: ember.js ember-old-router

我还是ember.js的新手,但是我还没有大规模看到的框架的一部分是基本的Ember路由器。在一个小的单页面应用程序中,你只有一个管理所有状态/路由/等的路由器。但随着你的应用程序的增长,如果模式似乎只关注一个对象,你如何管理复杂性?

如果这只是我忽略的事情,或者假设这是一个庞大的全局状态管理对象,例如iOS中的AppDelegate,那就很好奇。

1 个答案:

答案 0 :(得分:2)

我不知道我的方式是否是普遍接受的最佳做法,但我确实知道当路由器变大时应将其拆分为多个文件。我完成了这样的事情:

app_router.js

App.Router = Ember.Router.extend({
  enableLogging: true,
  root: Ember.Route.extend({
    route: '/',
    index: Ember.Route.extend({
      route: '/',
      redirectsTo: 'app.index'
    }),
    app: Ember.Route.extend({
      route: '/app',
      showProfile: Ember.Route.transitionTo("user.index"),
      index: Ember.Route.extend({
        route: '/',
        redirectsTo: 'items'
      }),
      items: App.ItemsRoute,
      item: App.ItemRoute,
      users: App.UsersRoute,
      user: App.UserRoute,
      hashtagbrand: App.HashtagbrandRoute
    })
  })
});

items_router.js

App.ItemsRoute = Ember.Route.extend({
  route: '/items',
  connectOutlets: function(router, items) {
    router.get("applicationController").connectOutlet({
      name: 'carouselContainer',
      outletName: 'carousel',
      context: App.store.find(App.Item)
    });
    router.get("applicationController").connectOutlet({
      name: 'logo',
      outletName: 'header'
    });
  },
  index: Ember.Route.extend({
    route: '/'
  })
}); 


App.ItemRoute = Ember.Route.extend({
  route: '/items/:id',
  //...
  index: Ember.Route.extend({
    route: '/'
    //...
  })
});