2013-04-22 2 views
1

Я думаю, что у меня есть вложенный ресурс Ember вниз (master-detail). Но я пытаюсь продолжить гнездо на один уровень глубже, но через отношения has_many в моих данных. Я использую EmberData и Rails в качестве API, который, я считаю, настроен и работает по назначению. Но гнездящихся на один уровень вниз в моем шаблоне и маршрутизатор топала меня, и я не могу найти примеры там ...Вложенные маршруты через простые отношения с API EmberData и rails API?

Это мой текущий маршрутизатор (используя RC1, я думаю):

EmberGallery.Router.map(function() { 
    this.resource('uploads', function() { 
    this.resource('upload', { path: ':upload_id' }); 
    }); 
    this.resource('collections', function() { 
    this.resource('collection', { path: ':collection_id' }); 
    this.route('new'); 
    }); 
}); 

, который производит:

/#/uploads/1 
/#/collections/1 

Отлично, здорово. Но в моем приложении сборник has_many загрузки, так что я пытаюсь получить в этот адрес (мастер-деталь-деталь):

/#/collections/1/2 

ID: 1 является collection_id (который содержит кучу загрузки, это отлично работает)

ID: 2 будучи upload_id (как я получаю на это)

что бы мой маршрутизатор выглядеть? Что еще потребуется для этого?

EDIT: Я добавляю свой шаблон коллекции, который отображает и ссылается на загрузки, принадлежащие уникальной коллекции. В основном это отображает связанные загрузки правильно, но ссылка возвращает меня в #/uploads/1 вместо #/collections/1/2 (2 - загрузка в коллекции 1). Очевидно, что моя ссылка неправильная, но я подозреваю, что моя настоящая проблема заключается в том, что я загружаю заказы коллекции неправильно.

шаблоны/collection.js.hbs

<aside class="span8"> 
    <header> 
    <h4>Collection: {{title}}</h4> 
    </header> 
    <ul class="thumbnails"> 
     {{#each upload in uploads}} 
     <li class="span3"> 
      <aside class="thumbnail"> 
     {{#linkTo 'upload' this}}<img {{bindAttr src="upload.url"}} alt="{{upload.title}}">{{/linkTo}} 
      {{title}} 
      </aside> 
     </li> 
     {{/each}} 
    </ul> 
</aside> 
<article class="span4"> 
    {{outlet}} 
</article> 

ответ

0

Вы должны сделать свой маршрут collections.collection ресурс, чтобы иметь такой URL. Для этого:

EmberGallery.Router.map(function() { 
    this.resource('uploads', function() { 
     this.resource('upload', { path: ':upload_id' }); 
    }); 
    this.resource('collections', function() { 
     this.resource(
      'collection', 
      { path: ':collection_id' }, 
      function() { 
       this.route('upload', { path: ':upload_id' }); 
      } 
     ); 
     this.route('new'); 
    }); 
}); 

Вы будете иметь маршрут collection.index (не collections.collection.index) неявно создан. Адрес /collections/1/2 будет нацелен на маршрут collection.upload.

+0

Привет, спасибо. Кажется, это имеет смысл. К сожалению, у меня, похоже, есть другие проблемы с моим именованием шаблонов и, возможно, с использованием моих контроллеров, поскольку я не могу заставить это работать ... Я собираюсь добавить свой шаблон коллекции в свой оригинальный пост. –

+0

Проверьте это: [JS Bin] (http://jsbin.com/odovul/19/). – Costent