在其他模板中更改主页的一部分

Change part of homepage in other template

我有一个博客,其索引模板如下所示:

<header class="entry-header">
  <h1 class="entry-title">BLOG</h1>
</header>

<div class="entry-content">
  {{outlet}}
</div>

我将内容本身包含在出口中(单个-post、post-列表等)。 不过我想根据当前路由修改上面模板h1的内容

你会怎么做?

您可以将 h1 移动到应用程序模板并在 ApplicationController 上使用 属性,它可以在其他路由中设置为所需的值。像这样:

App.Router.map(function() {
  this.route('other');
});

App.OtherRoute = Em.Route.extend({
  afterModel: function() {
    this.controllerFor('application').set('elementContent', '123')
  }
});

App.ApplicationController = Em.Controller.extend({
  elementContent: 'BLOG'
});

Demo. 如果它没有在应用程序模板中声明,那么您可以在控制您的 index-template 的任何控制器上使用 属性,并在任何应该更改 h1 内容的路由中使用 this.controllerFor('controllerControllingIndexTemplate').set('property', 'value')。它应该始终有效。

ApplicationControllercurrentPath stores the full path of the current route. Therefore within IndexController specify that it needs ApplicationController 并使用其 currentPath 属性 填充 h1.entry-title 内容:

App.IndexController = Ember.Controller.extend({
  needs: ['application'],
  currentPath: Ember.computed.alias('controllers.application.currentPath'),

  isInPostsRoute: Ember.computed.equal('currentPath', 'posts'),
  isInUsersRoute: Ember.computed.equal('currentPath', 'users'),
  // etc
});

index.hbs:

<header class="entry-header">
  <h1 class="entry-title">
    {{#if isInPostsRoute}}
      Posts
    {{else}}{{#if isInUsersRoute}}
      Users
    {{/if}}{{/if}}
  </h1>
</header>