Ember - Настройка заголовка домашней страницы в контроллере или маршруте?

Какова лучшая практика?

Это мой HTML:

<script type="text/x-handlebars">
    <div id="top-panel">
        <h1>{{title}}</h1>
    </div>
    <div id="wrapper">
        <div id="content">
            {{outlet}}
        </div>
    </div>
</script>

Где я должен установить {{title}}? Я обнаружил, что есть два способа сделать это...

Первый:

App.ApplicationRoute = Ember.Route.extend({
    setupController: function (controller) {
        controller.set("title", "Foo Bar")
    }
});

Во-вторых:

App.ApplicationController = Ember.ObjectController.extend({
    title: "Hello World"
});

Какой из них является рекомендуемым способом сделать это?

1 ответ

Решение

Если это просто статичная вещь, которая никогда не изменится, я бы поместил ее во вторую или просто в шаблон руля.

Дополнительно

  1. поскольку вы не устанавливаете объект на контроллере приложения, на самом деле нет необходимости расширять ObjectController, вы можете просто расширить Controller.

    Ember.ObjectController is part of Ember's Controller layer. It is intended to 
    wrap a single object, proxying unhandled attempts to get and set to the 
    underlying content object, and to forward unhandled action attempts to its target.
    
  2. В будущем, если вы переопределяете setupController, обычно рекомендуется вызывать this._super(controller, model) следующим образом:

    setupController: function (controller, model) {
       this._super(controller, model)
       controller.set("title", "Foo Bar")
    }
    

Реализация по умолчанию в setupController - это установка содержимого на контроллере, так что технически не имеет значения, что вы не вызываете super.

В случае динамического заголовка я бы сделал его вычисляемым свойством:

 App.ApplicationController = Ember.ObjectController.extend({
     title: function(){
        var currentdate = new Date(),
            title = "Awesome Title: " + currentdate.getDate() + "/"
            + (currentdate.getMonth()+1)  + "/" 
            + currentdate.getFullYear() + " @ "  
            + currentdate.getHours() + ":"  
            + currentdate.getMinutes() + ":" 
            + currentdate.getSeconds();

          return title;
     }.property()
 });
Другие вопросы по тегам