Вложенные маршруты через простые отношения с EmberData и API рельсов?

Я думаю, что у меня отключен вложенный ресурс Ember (master-detail). Но я пытаюсь продолжить гнездо на один уровень глубже, но через отношение has_many в моих данных. Я использую 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, поэтому я пытаюсь перейти к этому URL-адресу (основной-подробности-подробности):

/#/collections/1/2 

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

id:2 является upload_id (как мне это понять?)

Как будет выглядеть мой маршрутизатор? Что еще нужно для того, чтобы это работало?

РЕДАКТИРОВАТЬ: я добавляю шаблон моей коллекции, который отображает и ссылается на загрузки, принадлежащие одной коллекции. В основном это правильно отображает связанные загрузки, но ссылка возвращает меня к #/uploads/1 вместо #/collections/1/2 (2 — это загрузка в коллекции 1). Очевидно, что моя ссылка неверна, но я подозреваю, что моя настоящая проблема в том, что я загружаю коллекции неправильно.

шаблоны/коллекция.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>

person Kevin Kornemann    schedule 22.04.2013    source источник


Ответы (1)


Вы должны сделать свой маршрут 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). URL-адрес /collections/1/2 будет нацелен на маршрут collection.upload.

person Costent    schedule 22.04.2013
comment
Привет, спасибо за это. Кажется, это имеет смысл. К сожалению, у меня, кажется, есть другие проблемы с именами моих шаблонов и, возможно, с использованием моих контроллеров, поскольку я не могу заставить это работать... Я собираюсь добавить свой шаблон коллекции в свой исходный пост. - person Kevin Kornemann; 25.04.2013