Ember.js: лучшие практики для заголовков в зависимости от подмаршрута

Допустим, у меня есть маршрут A с подмаршрутами A1 и A2. На всех страницах есть заголовок, который в основном идентичен, но немного отличается в зависимости от того, является ли он A1 или A2.

Наиболее очевидная идея — поместить заголовок в шаблон A, как в

{{! header here }}
{{outlet}}

Однако в момент создания этого заголовка я не знаю, нахожусь ли я на A2 или A2. Поэтому мне нужно будет вручную проверить URL-адрес или маршрут, чтобы увидеть, где я нахожусь, как в

isA1: Ember.computed.equal('application.currentRoute', 'A.A1')

и в шаблоне шапки

{{#if isA1}} {{! A1-specific stuff }} {{/if}}

но это кажется хрупким и уродливым.

Другая альтернатива — не помещать заголовок в A/template и превратить его в партиал, который вызывается с каким-то параметром из A1/template и A2/template. Это будет работать нормально, за исключением того, что жаль не использовать способность Ember указывать разметку в шаблоне родительского маршрута и вводить разметку дочерних маршрутов через {{outlet}}. Это также приводит к повторному рендерингу заголовка при переключении между A1 и A2, если это имеет значение.

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

Я видел все эти подходы, но есть ли что-то более идиоматичное для этого случая?


person Community    schedule 11.03.2015    source источник
comment
Пробовали ли вы использовать именованные розетки (возможно, это может помочь)? Основная проблема с именованными выходами заключается в том, что вам нужно написать больше кода, поскольку вам, возможно, придется реализовать renderTemplate для большинства, если не для всех маршрутов. Прошло некоторое время с тех пор, как я использовал Ember, поэтому сегодня подход к именованным выходам может быть другим.   -  person MilkyWayJoe    schedule 12.03.2015


Ответы (1)


Вы можете просто не помещать заголовок в A/template и иметь там только {{outlet}}, а также включить заголовок A1 в A1/template и заголовок A2 в A2/template.

person Hrishi    schedule 21.03.2015