2015-12-02 2 views

ответ

0

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

, если это так, вам нужно создать обработчик события для входа, а затем захватить параллельный используемый вход с помощью «это», вот пример:

HTML файл:

<template name="emailForm"> 
    {{#each item in items}} 
    <input name="email" class="email" placeholder="enter email address"> 
    <button class="addEmail">+</button> 
    {{/each}} 
</template> 

в файл JS:

if(Meteor.isClient) { 
    Template.emailForm.events({ 
    'click .addEmail': function(event) { 
     console.log(this); 
    } 
    }); 
} 

взглянуть на то, что выходит с «этим» и выяснить, как извлечь нужную бит данных, как он будет представлять только Clicked элемент.

+0

На самом деле, форма содержит и другие входы, и я обрабатываю электронные письма вне рамки шаблона, возможно ли это в этом случае? –

+0

начиная с моего пути с Meteor Я работаю только в шаблонах. маршрутизация и шаблоны имеют довольно короткую кривую обучения, и после ее освоения нет причин делать что-либо за пределами шаблона. это довольно сложно принять, но в некотором роде, не работая внутри шаблона, не хватает множества функций и мощности, которые могли бы заставить вас выбрать «Метеор» в первую очередь. но, конечно, у каждого свои предпочтения ... –

1

На сегодняшний день самым простым способом охвата событий в шаблонах Blaze является определение шаблонов на уровне, на котором вам нужно перехватывать события.

Если у вас есть:

<template name="companyEmails"> 
{{#each companyEmail}} 
    <input type="text" class="form-control valid" id="companyEmail" name="companyEmail[]"> 
{{/each}} 
</template> 

Затем, если вы приложите обработчик события к companyEmails шаблона вы должны выяснить, какие input была изменена.

Если изменить этот шаблон для:

<template name="companyEmails"> 
{{#each companyEmail}} 
    {{> oneCompanyEmail}} 
{{/each}} 
</template> 

<template name="oneCompanyEmail"> 
<input type="text" class="form-control valid" id="companyEmail" name="companyEmail[]"> 
</template> 

Затем вы можете прикрепить обработчик события к шаблону более низкого уровня и гарантировать, что вы получаете правильное событие на нужный объект с соответствующим контекстом данных :

Template.oneCompanyEmail.events({ 
    'input #companyEmail': function(ev,err){ 
    var emailAddress = ev.target.value; 
    console.log(this); // will be the value of companyEmail from the #each 
    } 
}); 
+0

Ваш код частично неверен, так как вы не можете использовать один и тот же 'id' более одного раза на одной странице. –

+0

Скопировал этот шаблон из OP. Вы правы, что уникальные идентификаторы были бы лучше здесь, например 'id = {{this._id}}' –

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