簡體   English   中英

Ember.js嵌套路線

[英]Ember.js nested routes

干杯! 我有路線:

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>

座位是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函數中獲得正確的模型。

如果您使用的是ember-1.0-pre.4 +,則僅針對您所在的特定路線返回參數,而不是整個URL。 這里有一些討論

我相信此時所需的方法是使用this.modelFor傳遞您在父路由中設置的父資源的名稱。 所以在你的情況下,它將是:

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

您只需要從model方法返回model

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

然后在您的模板中,您可以執行以下操作,其中controller是上下文:

{{model.seats}}

我還是EmberJS的新手,但我會編寫我的路由器和這樣的路線。

我不確定你是否需要將post資源包裝在posts資源中。 請注意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中?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM