7

乾杯!私はルートを持っています:

TravelClient.Router.map(function() {
  this.resource('tours', function() {
    this.resource('tour', { path: ':tour_id' }, function(){
      this.route('seats');
    });   
  });
});

そしてテンプレート:

  <script type="text/x-handlebars" data-template-name="tour/seats">
    {{...}}
  </script>

Seats は Tour オブジェクトの属性です。

TravelClient.Tour.find(1).get('seats');
12

そして、TourSeats ルートを次のように拡張します。

TravelClient.TourSeatsRoute = Ember.Route.extend({
  model: function(params) {
    return TravelClient.Tour.find(params.tour_id).get('seats');
  }
});

質問: テンプレートでツアーの座席をレンダリングする方法を教えてください。

アップデート:

私の備品は次のようになります。

TravelClient.Store = DS.Store.extend({
  revision: 11,
  adapter: 'DS.FixtureAdapter'
});

TravelClient.Tour = DS.Model.extend({
  title: DS.attr('string'),
  description: DS.attr('string'),
  seats: DS.attr('number')
});

TravelClient.Tour.FIXTURES = [{
  id: 1,
  title: "Brighton, England",
  description: "Lorem ipsum dolor ... .",
  seats: 12
},...

そして、ルートを次のように変更しました。

TravelClient.TourSeatsRoute = Ember.Route.extend({
  model: function(params) {
    return TravelClient.Tour.find(params.tour_id);
  }
});

そしてテンプレートで:

  <script type="text/x-handlebars" data-template-name="tour/seats">
    {{tour.seats}}
  </script>

更新 2:

  <script type="text/x-handlebars" data-template-name="tour/seats">
    {{controller.model.seats}}
  </script>

そしてそれは undefind を返します。いくつかのデバッグの後、params に id がなく、params が空であることを発見しました。そのため、TourSeatsRou​​te 関数で適切なモデルを取得できません。

4

3 に答える 3

18

ember-1.0-pre.4 +を使用している場合、パラメータは、URL全体ではなく、現在の特定のルートに対してのみ返されます。これについてはここでいくつかの議論があります。

現時点で望ましいアプローチはthis.modelFor、親ルートで設定した親リソースの名前を渡すことです。したがって、あなたの場合、次のようになります。

TravelClient.TourSeatsRoute = Ember.Route.extend({
  model: function() {
    return this.modelFor("tour");
  }
});
于 2013-02-06T05:20:31.237 に答える
2

modelメソッドからモデルを返すだけです。

TravelClient.TourSeatsRoute = Ember.Route.extend({
  model: function(params) {
    return TravelClient.Tour.find(params.tour_id);
  }
});

そして、テンプレートで次のことができますcontrollerコンテキストは次のとおりです。

{{model.seats}}
于 2013-02-01T12:08:06.523 に答える
1

私はまだEmberJSを初めて使用しますが、ルーターとルートをこのように作成します。

投稿リソースを投稿リソース内にラップする必要があるかどうかはわかりません。ToursSeatsRou​​teの複数形に注意してください

TravelClient.Router.map(function() {
  this.resource('tours', function() {        
    this.route('/:tour_id/seats');        
  });
});

これにより、次のURLが提供されます。

/tours-これをArrayControllerにマップできます

/ tours /:tour_id/seats-これをObjectControllerにマップできます

TravelClient.ToursSeatsRoute = Ember.Route.extend({
  model: function(params) {
    console.log(params); 
    return TravelClient.Tour.find(params.tour_id);
  }
});

試してごらん?または、コードをJSFiddleに配置しますか?

于 2013-02-04T11:57:02.023 に答える