2014-11-29 4 views
1

Я нашел example code для получения значений текстовых входов из представленной формы в Meteor. Я написал свой own version. Прекрасно работает! Вот отрывок из моей отправки формы обработчик события:Как «event.currentTarget.INPUT.value» дает мне входное значение в обработчике отправки Meteor?

'submit form': function(event, template) { 
    event.preventDefault(); 
    Assets.insert({ 
    name: event.target.inputName.value, 
    location: event.target.inputLocation.value, 
    value: event.target.inputValue.value 
    }); 
} 
  1. Я запутался о event.target.playerName. Что это за объект? Метеор создал для нас этот объект? Или это вещь jQuery? Или что-то другое?
  2. Насколько лучше/безопаснее использовать event.currentTarget? Звуки, подобные формам вложенности, не допускаются, поэтому это может не иметь никакого значения, поскольку не было бы никакого способа «пузыриться» с учетом ключа карты событий «отправить форму».

Crossposted here.

ответ

0

Довольно новый для метеор, поэтому я мог быть совершенно неправ, но я считаю, что цель вашего мероприятия - это просто стандартный javascript, а не метеор или jQuery. Я думал об этом как о сокращении для создания собственного object.addEventListener(), поэтому ваш playerName будет дочерним элементом формы, так как он является ключом объекта.

Представьте себе, если бы это была установка чего-то вроде form.addEventListnener('submit', function(e){ ... }), возможно, это станет более знакомым.

Что касается номера 2, я бы не понял, почему вы не могли использовать currentTarget, если вам нужно. Я не думаю, что это было бы безопаснее, если бы вы действительно не знали, откуда может произойти событие (возможно, создание пользовательского пакета?).

1

В этом случае вы не используете объект template, а скорее простой способ jQ. Из быстрого просмотра страницы, содержащей пример кода, они используют function(event), а не function(event, template) (я предпочитаю последнее, но это вопрос вкуса). Вот как использовать объект template.

Предположим, ваша форма выглядит следующим образом

<template name='createAccount'> 
<form role="form"> 
     <input placeholder="Your Name" name="name" type="text" /> 
     <input placeholder="E-Mail Address" name="email" type="email" /> 
     <input placeholder="Password" name="password" type="password" /> 
     <div id="submitForm" class="outerButton"> 
      (SOME BUTTON) 
     </div> 
    </form> 
</template> 

Вот рисунок с помощью template:

Template.createAccount.events({ 
    'click #submitForm': function (event, template) { 
      var displayName = template.find("input[name=name]").value; 
      var eMailAddress = template.find("input[name=email]").value; 
      var password = template.find("input[name=password]").value; 
      < INSERT displayName, eMailAddress, password IN COLLECTION> 
    } 
}) 
0
  1. event.target возвращает элемент DOM. В вашем случае это элемент form, и вы можете использовать именованное свойство, чтобы получить его узел, см.

  2. В этом случае это нормально использовать либо целевую, либо текущуюTarget. В других примерах, когда есть «вложенный» узел, лучше использовать currentTarget.