通过与EmberData和rails 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 (master-detail-detail):

/#/collections/1/2 

id:1是collection_id(其中包含一堆上传,这伟大的工作)

id:2是upload_id(我怎么得到这个?)

我的路由器会是什么样子?这还需要什么?

编辑:我正在添加我的集合模板,它显示并链接到属于单个集合的上传。基本上这显示了相关的上传正确,但链接带我回到#/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>

你必须让你的路由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

最新更新