2013-01-04 14 views
6

Czy można wywołać niestandardowe wydarzenie z Meteorytem? Widzę, że wyzwalanie niestandardowych zdarzeń jquery nie działa, ponieważ zdarzenia Meteor są oddzielne od jQuery (as discussed here).Jak wywołać zdarzenie niestandardowe z Meteorsem JS

Więc gdybym miał coś takiego:

Template.foo.events({ 
    'mouseenter .box, makeSelected .box': function() { ... } 
}) 

Byłoby miło gdybym mógł zrobić coś wzdłuż linii:

Meteor.trigger($('.box')[0], 'makeSelected') 

Moje bieżące obejście jest tylko przechowywać identyfikator Chcę jako data-id="{{_id}}" na elemencie dom, a następnie użyć go, aby zmodyfikować klucz w sesji, ale będąc w stanie wyzwolić wydarzenie czuje się bardziej "SUCHA".

+0

Ten odpowiedział w maju: http://stackoverflow.com/questions/10646570/how-to-handle-custom -jquery-events-in-meteor –

+2

@ WernerVesterås: w swoim drugim zdaniu odwołuje się do tego pytania. :-) – Rahul

+1

@Rahul za wcześnie rano ... :-P –

Odpowiedz

5

Meteor obecnie nie obsługuje zdarzeń niestandardowych, ale zawsze można po prostu użyć jQuery (lub cokolwiek chcesz) do tworzenia zdarzeń niestandardowych, a następnie upewnić się, że są one ponownie dołączane do odpowiednich elementów za pomocą zdarzenie rendered na szablonach:

Template.foo.rendered = function() { 
    attachEvents(); 
} 
+0

Dlaczego konieczne jest wywoływanie attachEvents podczas uruchamiania? Czy to nie zawsze będzie wywoływane. Zrezygnowano? –

+1

Prawidłowo. Zaktualizowałem odpowiedź. – Rahul

5

Podobno to działa teraz przy użyciu jQuery zdarzenia wyzwalającego i składnię słuchania standardowy zdarzeń Meteor. Patrząc na kod na karuzeli Bootstrap, emituje niestandardowe zdarzenie jQuery w następujący sposób:

var slideEvent = $.Event('slide.bs.carousel', { 
    // event state 
}) 
this.$element.trigger(slideEvent) 

I pomyślnie słuchał tego wydarzenia, wykonując:

Template.carousel.events({ 
    'slide.bs.carousel': function (event, template) { 
     // event handler code here... 
    } 
}); 

byłem mile zaskoczony, jak łatwo zdarzenia Bootstrap (jQuery) zazębiały się z Meteorem.

0

Meteor reaguje kiedy wyzwalać zdarzenia sposób jQuery (zakładając jego zainstalowaniu)

$('.box').mouseenter(); 
0

Kliknięcie #showOffered ustawia się #searchFilter do szczególnej wartości i filtruje wyniki (nie pokazane):

<template name="brokerProducts"> 
      <div class="input-group"> 
       <input id="searchFilter" type="text" class="filter form-control" placeholder="Search for ..." value="{{filterValue}}"> 
       <span id="showOffered" class="btn input-group-addon">Show Offered</span> 
      </div> 
</template> 

Wydarzenia te sprawdziły się u mnie. Kliknięcie ustawia wartość i wyzwala zdarzenie wejściowego, który filtruje wyniki (nie pokazany):

Template.brokerProducts.events({ 
    'input .filter': (event, templateInstance) => { 
    templateInstance.filter.set(event.currentTarget.value); 
    }, 
    'click #showOffered': (event, templateInstance) => { 
    $('input#searchFilter').val('show:offered').trigger('input'); 
    } 
}) 
Powiązane problemy