2015-06-18 2 views
1

Этот вопрос не всегда появляется. Он отлично работает, если я подожду какое-то время загрузки страницы или, если достаточно подождать между щелчками, чтобы изменить язык в этом выпадающем меню. Это для простого многоязычного веб-сайта.Как подождать рендеринга, прежде чем действовать на событие click?

Моего Выпадающий в нав-бар выглядит следующим образом:

.... 
    <li class="dropdown"> 

    <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <img src="Pictures/BR-US-SP.png"><b class="caret"></b></a> 
      <ul class="dropdown-menu" id="langMenu"> 
       <li><a href="#" id="pt-BR" name="pt-BR" value="pt-BR"><img src="/Pictures/1383607461_Brazil.png"></a></li> 
       <li><a href="#" id="en" name="en" value="en"><img src="/Pictures/1383615303_United-States.png"></a></li> 
       <li><a href="#" id="es" name="es" value="es"><img src="/Pictures/1383615325_Spain.png"></a></li> 
       <li class="divider"></li> 
      </ul> 
    </li> 
    .... 

И событие выглядит следующим образом:

Template.navigation.events({ 
'click #langMenu': function(event){ 
     currentLang = $(event.target).attr('id'); 
    ... 
    // So some stuff with and re-renders page upon value of currentLang // 
    ... 
} 
}); 

Когда он ломает, консоль показывает, что переменная currentLang не определена. Поэтому я предполагаю, что это связано с тем, что шаблон не был предоставлен вовремя, чтобы событие click заработало его значение. Правильно ли это предположение?

Как я могу всегда получать значение currentLang?

Извините. Я провел пару дней, уже изучая его. Однако, поскольку Метеор развивается так быстро, меня путают многие возможные решения, которые я нашел и испытал, которые на самом деле не работали (устарели?). Я не могу получить от Meteor Docs точно, как использовать функции Blaze, когда и как использовать onRendered и т. Д. Есть ли хорошие примеры?

Вместо этого следует использовать совершенно другой подход, используя Iron Router? Если да, то как?

ответ

0

Вы должны заблокировать это. Текущий метод ES5 для этого будет

Template.navigation.events({ 
'click #langMenu': function(event){ 
     setTimeout(function(){ 
      currentLang = $(event.target).attr('id'); 
     },100) 
} 
}); 
+0

Привет thatgibbyguy, я попробовал это, но я все еще мог воспроизвести ошибку. Кажется, это уменьшает количество ошибок, произошедших с ошибкой, но это только мое впечатление. Я не могу подтвердить это статистически. Я пробовал также с 1000 и все еще мог воспроизвести его. Я искал что-то lilke «дождитесь, пока цель будет готова» или «хотите, пока не будет отображен шаблон x». – Juliomac

0

Проблема, вероятно, является селектором функции щелчка. Я хотел бы сделать это вместо:

Template.navigation.events({ 'click #langMenu>li': function(event){ currentLang = $(event.currentTarget).attr('id'); // Do stuff... } });

+0

Спасибо Чой. Раньше мне это нравилось ... Хотя я не заметил никаких реальных изменений. Я даже тестировал (снова) с #langMenu> li> a и все еще мог воспроизвести ошибку. – Juliomac

+0

Действительно? Использование 'event.currentTarget' в отличие от' event.target'? – Choy

+0

Я ушел с '' 'target''', потому что с' '' event.currentTarget''' я получаю '' 'undefined'''. Если я добавлю строку '' 'console.log (« значение currentTarget », event.currentTarget);' '' он показывает '' '

  • ' '' но тогда я с '' 'console.log (" значение currentTarget ", $ (event.currentTarget) .attr ('id'));' '' '' '' '' 'undefined''' – Juliomac

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