Ember Router and Controller

Я пытаюсь получить пример из Ember Guide, но я не понимаю:

window.App = Ember.Application.create()

App.Router.map ->
  this.route("about");
  this.route("favorites", { path: "/favs" })

App.IndexRoute = Ember.Route.extend({
  setupController: (controller) ->
    controller.set('title', "My App")
});

Шаблон:

<h1>{{title}}</h1>
<nav>
  {{#linkTo "index"}}Index{{/linkTo}}
  {{#linkTo "about"}}About{{/linkTo}}
  {{#linkTo "favorites"}}Favorites{{/linkTo}}
</nav>

Как я понимаю в примере, он должен отображать заголовок при достижении страницы индекса, но ничего не происходит. Так что некоторые могут увидеть, что здесь не так.

2 ответа

Решение

Вы устанавливаете title недвижимость в IndexController, но кажется, что ваш шаблон не index шаблон, а скорее application шаблон. Вы можете изменить свой IndexRoute использовать controllerFor так что вы можете получить доступ к ApplicationController (автоматически сгенерировано) и установите значение для свойства, подобное этому:

App.IndexRoute = Ember.Route.extend
  setupController: (controller) ->
    @controllerFor('application').set('title', 'My App')

(см. скрипку)

Или вы можете сделать это прямо в ApplicationRoute:

App.ApplicationRoute = Ember.Route.extend
  setupController: (controller, model) ->
    controller.set('title', 'My App')

(см. скрипку)

Хорошо, это маленькое предложение кажется здесь важным:

IndexController является начальным контекстом для шаблона индекса

Итак {{title}} должен быть в шаблоне индекса:

script(type="text/x-handlebars")

    <nav>
    {{#linkTo "index"}}Index{{/linkTo}}
    {{#linkTo "about"}}About{{/linkTo}}
    {{#linkTo "favorites"}}Favorites{{/linkTo}}
    </nav>
    {{outlet}}

script(type="text/x-handlebars", data-template-name="index")
    <h1>{{title}}</h1>
Другие вопросы по тегам