2013-06-13 4 views
9

Я знаю, что Meteor поддерживает события, и я видел его в действии на флажках, но я просто хотел, чтобы кто-то смог прояснить, можем ли мы перехватывать события изменений в метеор в выпадающих меню select, как показано нижеchange event on <select> Meteor.js

Template.templateName.events({ 
    'change select': function(e,t){ 
     // do whatever....... 
    } 
}); 

Я пытаюсь сделать это с помощью Метеор и это, кажется, не стреляя, когда я изменить значение в поле выбора. Однако, когда я использую jQuery для изменения, он работает нормально.

ответ

3

Ваш код должен работать, он отлично работает для меня.

Хотя я думаю, что события принимают только один аргумент eventMap, а не два. Каким будет аргумент «t»?

+0

Кристоффер K: Согласно некоторым из учебников, которые я наблюдал, я думаю, что t представляет собой какой-то целевой элемент, возможно, когда изменяется реактивная часть метеора. Что касается выбора кода, работающего нормально, странно, я пробовал его снова и снова даже на разных частях, и он по-прежнему не воспринимает событие изменения вообще. В любом случае спасибо за ответ. – koramaiku

+1

ОК, я использую event.currentTarget, чтобы получить текущую цель. Я думаю, что это «правильный» способ сделать это. Или вы имеете в виду какой-то другой элемент, кроме щелчка/изменения/любого другого? Спасибо! –

+3

Второй параметр может использоваться для получения связанных данных шаблона через t.data, например, когда вы используете {{#each users}} {{> itemRow}} {{/ each}}, вы можете прослушивать события в шаблоне itemRow и используйте t.data, чтобы получить пользователя, связанного со строкой –

1

Вы можете использовать такое событие, чтобы обрабатывать несколько флажков, а затем проверить некоторое свойство (часто id), чтобы увидеть, какой из них был нажат. Или вот с this возвращает мою клиентскую строку, я могу просто получить значение, которое я хочу из контекста.

фрагмент шаблона

{{#each phonemeResults}} 
    <tr> 
     <td> 
     <div class="checkbox"> 
      <label> 
      <input type="checkbox" class="star"> 
      </label> 
     </div> 
     </td> 
     <td> 
      {{word}} 
     </td> 
     <td> 
     <small>{{phoneme}}</small> 
     </td> 
    </tr> 
    {{/each}} 

обработчик

Template.phonemeList.events({ 
    'change [type=checkbox]': function(e,t){ 
    console.log("add " this.word + " to user's public starred list"); 
    }, 
}); 
0

У меня аналогичная проблема. Получалось, что в мой шаблон были включены только элементы <option>, а элемент <select> находился за его пределами, в <body>. Убедитесь, что шаблонная карта событий настроена на самом деле содержит элемент <select>.

0

Если вы хотите, чтобы стрелять по конкретному выбору изменения коробки:

Template.chatRooms.events({ 
'change #chatroomList' : function(event){ 
     console.log("Changed") 
     } 
}) 

Если вы хотите, чтобы она срабатывала при любом изменении переключателя в шаблоне:

Template.chatRooms.events({ 
    'change select' : function(event){ 
      console.log("Changed") 
      } 
    })