2013-05-22 3 views
0

У меня есть вторичная навигация, которая используется для некоторых видов, но не для всех. Таким образом, я включаю следующее во взглядах, которые используют вторичную навигацию, которая работает без проблем:Обновление reused BackboneJS просмотров с jQuery

setupNavigationSecondary: => 
    view = new App.Views.Users.NavigationSecondary(navigation_active: ".navigation-secondary-manage") 
    @$(".navigation-secondary").replaceWith(view.render().el) 

Вы заметите, что я передать ссылку на «navigation_active», который говорит вторичную навигацию, какой пункт меню, чтобы пометить как активный. Вторичный вид навигации имеет следующий добавить «активный» класс к пункту меню правой:

navigation_active: "" 

    initialize: (options) -> 
    @navigation_active = options.navigation_active 

    setActiveNavigationItem: => 
    if @navigation_active.length 
     $(document).ready => 
     $(@navigation_active).parent().addClass('active') 

    render: -> 
    $(@el).html(@template()) 

    @setActiveNavigationItem() 

    return this 

Проблема:

Все отлично работает, когда страница сначала загружается непосредственно через URL в браузер, т. е. правильный вторичный элемент навигации имеет «активный» класс. Если я начал где-то в другом месте или перешел в другое место и вернусь к просмотру со вторичной навигацией - просмотры на экране обновляются после функции $ (@ navigation_active) .parent(). Функция addClass ('active') 'выполняется и поэтому элементы меню не имеют «активного» класса.

Итак, как я могу обновить активный элемент навигации после загрузки дополнительного навигационного представления?

+1

Дальнейшие исследования, я обнаружил, что я, вероятно, не пересоздать представления функции setupNavigationSecondary(). Я, вероятно, делаю несколько экземпляров одного и того же вида .... –

+0

Почему обновленные представления на экране обновляются после функции $ (@ navigation_active) .parent(). Выполняется функция addClass ('active') '? –

+0

Когда маршрутизатор запускается, начинается новое представление. Поместив предупреждающее сообщение после $ (@ navigation_active) .parent(). AddClass («active»), я вижу, что «активный» класс добавляется в представление, которое я использую в настоящее время. Как только я нажимаю «ОК» в предупреждающем сообщении, загружается следующее представление, которое убивает отображаемое в настоящее время представление ... после ввода этого параметра я только что обработал его. –

ответ

0

Я забыл один важный пункт, проблема решена сейчас.

setActiveNavigationItem: => 
    if @navigation_active.length 
     $(document).ready => 
     $(@navigation_active).parent().addClass('active') 

Должно быть

setActiveNavigationItem: => 
    if @navigation_active.length 
     // line removed - we don't need to wait for the DOM to be ready 
     @$(@navigation_active).parent().addClass('active') // @ symbol 
Смежные вопросы