我认为我有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
,所以我正试图访问这个网址(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>
答案 0 :(得分:0)
您必须让您的路线collections.collection
成为拥有此类网址的资源。要做到这一点:
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
。