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>

它给了未定义的回报。经过一些调试,我发现 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');        
  });
});

这将为您提供以下网址:

/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 回答