Ember.js嵌套路线

xam*_*rax 7 javascript model-view-controller web-applications ember.js

干杯! 我有路线:

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

还有一个模板:

  <script type="text/x-handlebars" data-template-name="tour/seats">
    {{...}}
  </script>
Run Code Online (Sandbox Code Playgroud)

座位是Tour对象的一个​​属性:

TravelClient.Tour.find(1).get('seats');
12
Run Code Online (Sandbox Code Playgroud)

我像这样扩展我的TourSeats路线:

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

问题:如何在模板中渲染巡演席位?

更新:

我的灯具看起来像那样:

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
},...
Run Code Online (Sandbox Code Playgroud)

我改变了我的路线延伸到这个:

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

在模板中:

  <script type="text/x-handlebars" data-template-name="tour/seats">
    {{tour.seats}}
  </script>
Run Code Online (Sandbox Code Playgroud)

更新2:

  <script type="text/x-handlebars" data-template-name="tour/seats">
    {{controller.model.seats}}
  </script>
Run Code Online (Sandbox Code Playgroud)

并且它给予了不发现.经过一些调试我发现,params中没有任何id,params是空的,这就是为什么我无法在TourSeatsRou​​te函数中获得正确的模型.

ros*_*sta 18

如果您使用的是ember-1.0-pre.4 +,则仅针对您所在的特定路线返回参数,而不是整个URL.这里有一些讨论.

我相信此时所需的方法是使用this.modelFor您在父路由中设置的父资源的名称.所以在你的情况下,它将是:

TravelClient.TourSeatsRoute = Ember.Route.extend({
  model: function() {
    return this.modelFor("tour");
  }
});
Run Code Online (Sandbox Code Playgroud)