Как заставить Ember отображать иной «лэйаут» для конкретного контроллера (роута)?

Задача
Отображать исключительно главную страницу в одном макете (лэйауте), все остальные — в другом (едином для всех).

Если конкретно, то на главной необходимо "прибить" футер к низу браузера (окна), а на остальных страницах сайта он должен быть "прибит" к низу самого сайта.

Что я попробовал
Добавил проверку текущего роута в контроллер и в роутере добавил if/else в renderTemplate для вывода лэйаута в нужном мне виде. Код ниже.

App = Ember.Application.create
  currentPath: ''

App.ApplicationController = Ember.Controller.extend
  updateCurrentPath: (->
    App.set('currentPath', @get('currentPath'))
  ).observes('currentPath')

  isIndexPage: (->
    true if @currentPath == 'index'
  ).property()

App.ApplicationRoute = Ember.Route.extend
  renderTemplate: ->
    if @get("controller.isIndexPage")
      @render "window-footer"
    else
      @render "footer"


Что еще пробовал
Делал футер отдельным outlet'ом и каждому роутеру указывал какой футер вставлять — не сработало.

Пробовал различные способы из Ember-гайдов, рабочего варианта не нашел :(
  • Вопрос задан
  • 2404 просмотра
Решения вопроса 1
Masaki42
@Masaki42 Автор вопроса
Вопрос, вроде как, решил сам.

Все оказалось проще, чем я предполагал — потребовались лишь отдельный аутлел и футер.

// application.emblem
.wrapper
if isIndexPage
  = partial "header"
  .main-content
    = outlet index
  = render index/footer
else
  = partial "header"
  .main-content
    = outlet
  = render footer


// App.IndexRoute
  renderTemplate: ->
    @render
      outlet: 'index'


p.s. В App.ApplicationController остались методы определения текущего пути, если что.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы