在插座内部渲染替换此内容

时间:2014-02-22 23:03:27

标签: view ember.js outlet

我在模板中渲染内容时遇到了一些困难。

这似乎是一件容易的事,但我无论如何都做不到。

有些人可以帮助我吗?

ApplicationView

<script type="text/x-handlebars" id="application">
<header class="logo"><!-- ... --></header>
<nav><!-- ... --></nav>
<hr class="top" />
{{outlet}}
<hr class="bottom" />
<footer><!-- ... --><div class="clear"></div>
</footer>
</script>

我有路线:

this.resource('exibition', {path: '/exposicoes/:exibition_id'}, function() {
  this.route('artist', {path: '/artistas/:artist_id'});
});

然后,链接exposicoes/2会在application outlet上显示id = 2的展示页面,对吗?

ExbitionView:

<script type="text/x-handlebars" id="exibition">
  <div class="exibitions">
    <h1>{{#link-to 'exibition'}}{{title}}{{/link-to}}</h1>
    <div class="left">
      <h2>Apresentação</h2>
      {{{text}}}
    </div>
    <div class="right"><h2>Artistas</h2>
      <ul>
        {{#each artist in artists}}
          <li>{{#link-to 'exibition.artist' artist}}{{artist.name}}{{/link-to}}</li>
        {{/each}}
      </ul>
    </div>
  <div class="clear"></div>
</div>
</script>

如何让ExbitionView中的艺术家链接在{{{text}}}取代内容的同一区域中打开?

我尝试使用插座,有些像:

<div class="left">
<h2>Apresentação</h2>
{{outlet showhere}}
</div>

在渲染ExbitionView时,使用renderTemplate(以及disconnectOutlet清除)填充它,但是如果用户使用后退按钮或甚至页面上的链接从/exibitions/2/artists/2返回/exibitions/2内容不再显示。

1 个答案:

答案 0 :(得分:1)

你非常接近正确的方法。

如您所知,请将您的{{text}}车把标签替换为插座,如下所示:

<div class="left">
    <h2>Apresentação</h2>
    {{outlet}}
</div>

然后,添加一个显式索引模板:

<script type="text/x-handlebars" data-template-name="exhibition/index">
    {{text}}
</script>

与匹配的ExhibitionIndexRoute类一起处理为此路线设置模型(包含文本数据)。

现在你有了一个插座,你的artists路线将正确地渲染到此插座并替换{{text}},而ExhibitionIndexRoute将正确地重新填充数据按钮。