我正在迭代entries
的列表,并希望显示列表中每个条目的内容,但仅限于相应条目的路径上。
即。 - 在路线/entries/2
* link to entry 1
* link to entry 2
content for entry 2
* link to entry 3
不幸的是,似乎我无法在{{outlet}}
循环中使用{{#each entry}}
。
最初我尝试在路由的isActive
内将setupController
设置为true,并在模板中检查它,但似乎没有一种好方法可以在您删除该标记时导航到/entries/3
(deactivate
仅在完全离开/entries/:entry_id
时才有效。有关详情,请参阅Is there an opposite of setupController?。
使用Ember做到这一点的最佳方式是什么?
答案 0 :(得分:4)
您可以使用带有itemController
的{{1}}并在该项控制器上设置计算属性,以确保当前{{each}}
属性等于model
当前模型
所以你将有以下路线设置:
App.EntryRoute
以下模板:
App.Router.map(function() {
this.resource('entries', { path: '/'}, function() {
this.resource('entry', { path: ':entry_id' });
});
});
不需要做的是创建<script type="text/x-handlebars" id="entries">
{{#each controller itemController="entryItem"}}
{{#linkTo "entry" this}}{{name}}{{/linkTo}} <br />
{{#if isSelected}}
{{details}} <br /><br />
{{/if}}
{{/each}}
控制器并添加计算属性App.EntryItem
,如果当前路由模型=== isSelected
类似的东西:
model
以上是适用于上述所有内容的小提琴:
答案 1 :(得分:0)
我通过以下方式实现了解决方案。 请告诉我代码中的任何缺点。 我在调用入口路径时将属性设置为Entry模型,以使其可见。
HTML:
<script type="text/x-handlebars" >
{{outlet}}
</script>
<script type="text/x-handlebars" id="entries">
{{#each controller }}
{{#linkTo "entry" this}}{{name}}{{/linkTo}} <br />
{{#if visi}}
<p>{{details}}</p>
{{/if}}
{{/each}}
</script>
JAVASCRIPT:
App = Ember.Application.create();
App.Router.map(function(){
this.resource('entries', { path: '/'}, function() {
this.resource('entry', { path: 'entry/:entry_id' });
});
});
App.Entry = Em.Object.extend({
id: null,
name: null,
details: null
});
App.entries =[
App.Entry.create({
id: 1,
name: 'entry 1',
details: 'details 1'
}),
App.Entry.create({
id: 2,
name: 'entry 2',
details: 'details 2'
}),
App.Entry.create({
id: 3,
name: 'entry 3',
details: 'details 3'
})
];
App.EntriesRoute=Ember.Route.extend({
model:function() {
return App.entries;
}
});
App.EntryRoute=Ember.Route.extend({
model:function(params) {
var id=parseInt(params.entry_id);
return App.entries.findProperty('id',id);
},
setupController:function(controller,model){
App.entries.setEach('visi',false);
model.set('visi',true);
}
});
问候。