2013-01-04 16 views
6

Meteorでカスタムイベントをトリガーすることはできますか? MeteorのイベントはjQuery(as discussed here)とは別のものなので、jqueryイベントの起動は機能しません。Meteor jsでカスタムイベントをトリガーする方法

私のようなものだったのであれば:

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

を私はの線に沿って何かをすることができればそれは素晴らしいことだ:

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

私の現在の回避策は、ちょうどそのIDを格納することです私はDOM要素にdata-id="{{_id}}"としたいし、それを使ってセッション内のキーを変更することができますが、イベントを引き起こすことができるのがより「DRY」に感じます。

+0

これは月に戻って答えた。http://stackoverflow.com/questions/10646570/how-to-handle-custom -jquery-events-in-meteor –

+2

@WernerVesterås:彼は2番目の文でその質問にリンクしています。 :-) – Rahul

+1

朝早すぎる@Rahul ... :-P –

答えて

5

Meteorは現在のところカスタムイベントをサポートしていないようですが、いつでもjQuery(または任意のもの)を使用してカスタムイベントを作成し、それらがそれぞれの要素に再接続されていることを確認できます。テンプレート上のrenderedイベント:

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

起動時にattachEventsを呼び出す必要があるのはなぜですか?とにかくそれがレンダリングされるとは限りませんか? –

+1

正しい。私は答えを更新しました。 – Rahul

5

は、どうやらこれは今jQueryのイベントのトリガと構文を聞いて、標準の流星イベントを使用して動作します。ブートストラップカルーセルのためのコードを見てみると、それは実行して、カスタムjQueryのイベントを発する以下:私はsucessfully行うことで、このイベントに耳を傾け

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

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

私はどのように簡単に愉快に驚きましたメテオでメッシュされたブートストラップ(jQuery)イベント。

0

あなたは、イベントをトリガしたときに流星が特別な値に#searchFilterを設定し、その結果(図示せず)をフィルタリング#showOfferedをクリックjQueryの道(その設置を想定)

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

を反応:

<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> 

これらの出来事は私のために働いた。セットに値をクリックして、その結果(図示せず)をフィルタリングし、入力イベントをトリガ:

Template.brokerProducts.events({ 
    'input .filter': (event, templateInstance) => { 
    templateInstance.filter.set(event.currentTarget.value); 
    }, 
    'click #showOffered': (event, templateInstance) => { 
    $('input#searchFilter').val('show:offered').trigger('input'); 
    } 
}) 
関連する問題