5

Ember 1.0-rc2 に同梱されている新しいバージョンでは、実行時にルートを追加できますか? Ember.Router

4

3 に答える 3

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

別の編集

プルリクエストがユーザーランドで行うことを行う要点を書きました。これにより、実行時にルートをマップできます。このコードを追加して、呼び出しをApp.Router.map定義したメソッドに置き換えるだけです

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

回答変更編集

このプル リクエストの時点で、map複数回呼び出すことができるようになりました。https://github.com/emberjs/ember.js/pull/2892

于 2013-04-16T21:00:03.780 に答える
1

最新リリースの ember.js rc7Router.mapでは、マップを上書きせずに複数回呼び出すことができる機能が に追加されました。これにより、実行時にルートを追加できます。

それが役に立てば幸い。

于 2013-08-15T21:04:59.453 に答える
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: "*:"});
  });
于 2013-04-27T16:11:53.460 に答える