Ember-Router:如何在Ember 1.0-rc2中在运行时添加路由?

时间:2013-04-10 09:29:20

标签: ember.js ember-router

在使用Ember 1.0-rc2发货的 new Ember.Router中,是否可以在运行时添加路由?

3 个答案:

答案 0 :(得分:4)

目前没有支持的方法。 App.Router.map调用由此代码的第235-247行处理:https://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/system/router.js

Ember.Router.reopenClass({
    map: function(callback) {
        var router = this.router = new Router();

        var dsl = Ember.RouterDSL.map(function() {
          this.resource('application', { path: "/" }, function() {
             callback.call(this);
          }) 
        });

        router.map(dsl.generate());
        return router;
    }

每次拨打Router.map时都会覆盖地图,因为上一次调用Router.map的回调未被保留。

修改 无论好坏,我都有一个拉取请求来改变行为以允许多次调用App.Router.map。我们会看到会发生什么。您可以点击此处https://github.com/emberjs/ember.js/pull/2485

另一个编辑

我写了一个要点来做我的拉请求在userland中做的事情。这将允许您在运行时映射路由。只需添加此代码,然后使用我定义的方法

替换您对App.Router.map的调用

https://gist.github.com/grep-awesome/5406461

回答更改编辑

在此拉取请求中,您现在可以多次致电maphttps://github.com/emberjs/ember.js/pull/2892

答案 1 :(得分:1)

我看到wmarbut的答案尚未被接受,但它是一个很好的答案(对我而言)。似乎他的补丁正在进入Ember版本,但在此之前,这是一些使用他的补丁的代码。 (不要接受我的回答,我很高兴找到这个。)我打算将它作为解决方案的一部分,让内容推动导航。好问题,user1517325和谢谢,wmarbut!

  // was an all-in-one router map as Ember likes it
  // App.Router.map(function() {
  //   this.resource("foods", function(){
  //     this.route("index", {path: "/"});
  //   });
  //   this.route("fourOhFour", { path: "*:"});
  // });

  //wmarbut's workaround until his patch is applied
  App.map_routes = [];

  App.MapRoutes = function(routes) {
      App.map_routes.push(routes);
      return App.Router.map(function() {
        var route_lamda, _i, _len, _ref;
        _ref = App.map_routes;
        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
          route_lamda = _ref[_i];
          route_lamda.call(this);
        }
        return true;
      });
  };

  //partial mapping
  App.MapRoutes(function() {
    this.resource("foods", function(){
    });
  });

  //some more mapping
  App.MapRoutes(function() {
    this.resource("foods", function(){
      this.route("index", {path: "/"});
    });
  });

  //even more mapping
  App.MapRoutes(function() {
    this.route("fourOhFour", { path: "*:"});
  });

答案 2 :(得分:1)

在最新版本的ember.js rc7 中,已将功能添加到Router.map,以允许多次调用它而不会覆盖地图。这将允许在运行时添加路由。

希望它有所帮助。