Ember.js 如何渲染模型';s模板,仅当在模型上时';什么路线?
我正在迭代一个Ember.js 如何渲染模型';s模板,仅当在模型上时';什么路线?,ember.js,Ember.js,我正在迭代一个条目列表,并希望显示列表中每个条目的内容,但仅当在相应条目的路径上时 i、 e.-在路线上时/entries/2 * link to entry 1 * link to entry 2 content for entry 2 * link to entry 3 不幸的是,我似乎无法在{{{each entry}}循环中使用{{outlet}} 最初,我试图在路线上的setupController中将isActive设置为true,并在模板中检查该设置,但当您导航到/ent
条目列表
,并希望显示列表中每个条目的内容,但仅当在相应条目的路径上时
i、 e.-在路线上时/entries/2
* link to entry 1
* link to entry 2
content for entry 2
* link to entry 3
不幸的是,我似乎无法在{{{each entry}}
循环中使用{{outlet}}
最初,我试图在路线上的setupController
中将isActive
设置为true,并在模板中检查该设置,但当您导航到/entries/3
(deactivate
仅在完全远离/entries/:entry_id
时才起作用)。有关详细信息,请参阅
使用Ember执行此操作的最佳方法是什么?您可以使用带有
{{each}}
的项目控制器,并在该项目控制器上设置计算属性,以确保当前模型
属性等于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}}
这里有一个小提琴与所有上述应用:
您可以将itemController
与{{each}}
一起使用,并在该itemController上设置一个计算属性,以确保当前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}}
这里有一个小提琴与所有上述应用:
我通过以下方式实现了解决方案。
请让我知道我的代码中有什么不足之处。
当调用入口路径使其可见时,我将属性设置为入口模型
HTML:
关于。我通过以下方式实现了解决方案。
请让我知道我的代码中有什么不足之处。
当调用入口路径使其可见时,我将属性设置为入口模型
HTML:
问候。您是否尝试过在{{{each}}
中使用{{partial}}
帮助程序而不是{outlet}这对您有用?我猜技巧是仅在条目
处于活动状态时才渲染部分。您是否尝试过在{each}}中使用{partial}
帮助程序而不是{{{outlet}}这对您有用吗?我猜技巧只是在条目
处于活动状态时渲染部分。
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);
}
});