10

オプションのパラメーターを持つ emberjs でルートを定義したいです。

/video/video/123

パラメータが指定されていない場合は、デフォルトのモデル/フィクスチャを使用したいと考えています。パラメータが指定されている場合は、明らかにパラメータを使用してモデルを検索したいと考えています。

その後、別のルートに移動し、パラメータなしでルートに戻る場合は、以前にロードされたモデルを使用したいと考えています。

例えば:

startup app

/video- デフォルト/フィクスチャ モデルを表示

/video/123- モデル 123 を表示

/another-route- 新しいルートを表示

/video- モデル 123 を表示

これは可能ですか?

4

3 に答える 3

7

私は別のソリューションを使用することになりました:

  this.resource('video', function() {
    this.route('index', {path: '/'});
    this.route('item', {path: ':id'});
  });

これらのルートは以下をサポートします。

/video- デフォルト/フィクスチャ モデルを表示

/video/123- モデル 123 を表示

ユーザーが にアクセスするとき/video、VideoIndexRoute は ID なしで VideoItemRoute にリダイレクトする必要があります。

var VideoIndexRoute = Em.Route.extend({

  afterModel: function() {

    // this is the tricky part
    this.replaceWith('video.item', '');

  }

});

ここで、VideoItemRoute はモデルが関連付けられているかどうかを確認する必要があり、モデルが見つからない場合は、デフォルトのフィクスチャまたは新しいフィクスチャを使用する必要があります。

var VideoItemRoute = Em.Route.extend({

  model: function(param) {
    if (param.id) {
      return this.store.find('video', param.id);
    }
  },

  setupController: function (controller, model) {
    if (!model) {
      model = this.store.createRecord('video',{
        name: 'default Name'
      });
      // or use fixture...
    }
    this._super(controller, model);

  }

});
于 2014-11-28T11:33:17.590 に答える
0

確かに、最後のビデオをグローバル変数に保存するなど、少し変わったことをする必要がありますが、それはあなた次第です。

http://emberjs.jsbin.com/uhoQozu/1/edit

http://emberjs.jsbin.com/uhoQozu/1#/video

http://emberjs.jsbin.com/uhoQozu/1#/video/32

App.Router.map(function() {
  this.resource('videoModel', {path:'/video/:video_id'});
  this.resource('video');  // this resource can be accessed at /video
});
于 2013-11-15T00:46:28.340 に答える