2013-06-13 11 views
9

Wiem, że Meteor obsługuje zdarzenia i widziałem je w akcji na polach wyboru, ale chciałem, aby ktoś mógł wyjaśnić, czy możemy śledzić zmiany w meteorach na wybranych listach, tak jak poniższeZmień wydarzenie na <select> Meteor.js

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

próbuję to zrobić przy użyciu Meteor i nie wydaje się być wypalanie przy zmianie wartości w polu wyboru. Jednak gdy używam jQuery do zmiany rzeczy, to działa dobrze.

Odpowiedz

3

Twój kod powinien zadziałać, działa dobrze dla mnie.

Chociaż wydaje mi się, że zdarzenia przyjmują tylko jedno zdarzenieMap-argument, a nie dwa. Czym byłby argument "t"?

+0

Kristoffer K: Według niektórych z tutoriali, które śledziłem, myślę, że t oznacza jakiś ukierunkowany element, prawdopodobnie gdy zmienia się reaktywna część meteorów. W odniesieniu do kodu wyboru działającego dobrze, dziwne, próbowałem go wielokrotnie na różne części i nadal nie odbierać zdarzenia zmiany w ogóle. W każdym razie dzięki za odpowiedź. – koramaiku

+1

OK, używam event.currentTarget, aby uzyskać bieżący cel. Myślę, że to "poprawny" sposób na zrobienie tego. Czy masz na myśli jakiś inny element niż kliknięty/zmieniony/cokolwiek? Dziękuję Ci! –

+3

Drugi parametr może być użyty do pobrania powiązanych danych szablonu przez t.data, na przykład gdy korzystasz z {{# użytkowników}} {{> itemRow}} {{each/each}} możesz słuchać zdarzeń w szablonie itemRow i użyj t.data, aby uzyskać użytkownika powiązanego z wierszem –

1

można użyć zdarzenia takiego jak ten do obsługi wielu pól wyboru, a następnie sprawdź niektóre właściwości (często id), aby zobaczyć, który został kliknięty. Lub tutaj, ponieważ this zwraca wiersz mojego klienta, mogę po prostu uzyskać wartość, którą chcę z kontekstu.

fragment szablonu

{{#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}} 

obsługi

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

mam podobny problem. W moim szablonie uwzględniono tylko elementy <option>, a element <select> znajdował się poza nim, w <body>. Upewnij się, że szablon, w którym skonfigurowana jest mapa zdarzeń, zawiera element <select>.

0

Jeśli chcesz go odpalić na konkretnej wybranej zmiany nadwozia:

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

Jeśli chcesz go odpalić na każdej zmianie selectbox w szablonie:

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