2016-04-16 2 views
4

У меня есть компонент navbar, который я разместил в application.hbs, чтобы он всегда был видимым. Но я хочу изменить заголовок навигационной панели на каждой странице, которую я посещаю (скажем, я на индексной странице должен сказать «Домой», если я на странице профиля, он должен сказать профиль и т. д.). Теперь все, что происходит, это название навигация всегда остается «Домой» для всей страницы. Это происходит потому, что navbar получает отображаемый onlu во время загрузки страницы в браузере, и после этого он не изменяется в соответствии со страницей.Невозможно сделать элементы навигационной панели динамическими в ember

application.hbs

{{top-navbar dp_url=model.profile.dp_url first_name=model.profile.first_name title=title}} 

{{outlet}} 

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

application.js (контроллер)

if (currentPage === "" || currentPage === "#"){ 
     currentState.set('title',"Home") 
} 
else if(currentPage === "Userprofile"){ 
     console.log('myStudio'); 
     currentState.set('title',"UserProfile"); 
} 

здесь в currentpage имеет текущий URL из приложения и я сравниваю его и решить, значение заголовка для навигационной панели.

Но значение титула top-navbar вычисляется только в первый раз, когда пользователь загружает приложение в браузере, а не когда я перемещаюсь из одного маршрута в другой.

Я также пробовал Ember.Evented, но не смог его решить.

ответ

0

Я не знаю, какие версии Ember.js и Ember-data вы используете, currentState - это deprecated since 2.1, так или иначе, вы используете закрытый метод, предназначенный для внутренних элементов Ember и не предназначенный для использования в приложении.

Возможным (но, возможно, ненужным сложный) способ добиться того, чего вы хотите:

  1. Создание модели с информацией, которую вы хотите, чтобы мутировать в навигационной панели (например, navbar-data).
  2. На маршруте, где отображается навигационная панель, создайте и верните запись для него с использованием фиксированного числового идентификатора (например, store.createRecord('navbar-data', { id: 1, title: "index" })).
  3. Передайте созданную запись компоненту (а не только строке).
  4. Всякий раз, когда вы хотите изменить, загляните в запись с помощью store.peekRecord('navbar-data', 1) и измените значение, которое вы хотите изменить на панели навигации.

Конечно, запись вы используете для этого сусло не быть сохранены с record.save().

Смежные вопросы