2016-08-03 2 views
0

Я должен отображать divs в зависимости от профиля пользователя, оба divs отображаются как ожидалось, но события jquery (внутри отдельного файла) не работают, но если я удалю " if else condition ", события jquery работают правильно, спасибо.Событие jquery не работает внутри метеор js handlebars

Я попытался поместить div в новый шаблон, но он также не работает.

<!-- home profile template --> 
{{# if bandprofile currentUser.profile.type }} 
     <div id="bandnamediv" class="userinforow"> 
     <span>Band name:</span> 
     <input type="text" id="bandnameinput" class="oldinfo bld " value=" {{currentUser.profile.bandName}}"/> 
     <span class="savebandname">save</span> 
    </div> 
{{/if}} 
{{# if userprofile currentUser.profile.type }} 
     <div id="firstnamediv" class="userinforow"> 
      <span class="oldinfo bld">First name: </span> 
      <input type="text" id="firstnameinput" class="oldinfo" value="{{currentUser.profile.firstname}}"/> 
     <span class="savefirstname bld oldinfo">save</span> 
     </div> 
{{/if}} 
<!--end home profile template--> 

Шаблон хелперы

Template.homeprofile.helpers({ 
    bandprofile: function(usertype){ 
     if(usertype === "band") { return true; } 
     else {return false;} 
    }, 
    userprofile: function(usertype){ 
    if(usertype === "costumer"){ return true; } 
    else {return false;} 
} 
}); 

внешний JQuery файл:

$('.savefirstname').click(function(){ 
    alert('save first name'); 
    /*other things*/ 
}); 
$('.savebandname').click(function(){ 
    alert('save band name'); 
    /*other things*/ 
}); 
+0

Есть ли причина, по которой вы пытаетесь использовать jQuery вместо помощника? – smoksnes

+0

@smoksnes Я помещаю все трюки jquery в отдельный файл, чтобы помощники не переусердствовали с такими событиями – nemrrached

+0

Так что, используя собственный файл 'Template.homeprofile.events', это не вариант? Не «помощник», а «события». – smoksnes

ответ

1

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

Template.homeprofile.events({ 
    'click .savefirstname': function(e, template){ 
     alert('save first name'); 
     /*other things*/ 
    } 
    'click .savebandname': function(e, template){ 
     alert('save band name'); 
     /*other things*/ 
    } 
}); 

От docs.

Карта событие является объектом, где свойства определяют набор событий для обработки, а значения являются обработчики для этих событий.

...

Типы событий и их применения включают в себя: нажмите, изменение, фокус, размытие ...

Так что, да, Я бы сказал, что события должны быть включены в Template.homeprofile.events, основываясь на помещениях, которые вы определили в вопросе, где вы пытаетесь связать событие (click).

В противном случае, если вы действительно хотите использовать jQuery для своих событий, вы, вероятно, можете использовать on вместо click. Meteor отображает контент динамически, что, вероятно, является причиной того, что ваш слушатель событий не собирает его.

+0

он работает. '$ ('. wrapperdiv'). on ('click', '.savefirstname', function() { alert ('сохранить имя'); /* другие вещи */ });' – nemrrached

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