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);
    }
});