2013-01-04 66 views
6

使用流星可以觸發自定義事件嗎?我發現觸發自定義jquery事件不起作用,因爲Meteor事件與jQuery(as discussed here)是分開的。如何使用流星觸發自定義事件js

所以,如果我有這樣的事情:

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

這會是很好,如果我可以做線沿線的東西:

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

我目前的解決方法是隻存儲的ID我想在dom元素上輸入data-id="{{_id}}",然後用它來修改會話中的某個鍵,但能夠觸發該事件會感覺更「幹」。

+0

這是在五月回答道:http://stackoverflow.com/questions/10646570/how-to-handle-custom -jquery-events-in-meteor –

+2

@WernerVesterås:他在第二句話中提到了這個問題。 :-) – Rahul

+1

@Rahul太早了...... :-P –

回答

5

流星似乎並不支持自定義事件,但你可以隨時使用jQuery(或任何你想要的)來創建自定義事件,然後確保它們被重新連接到它們各自的元素在rendered事件的模板:

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

爲什麼有必要在啓動時調用attachEvents?無論如何,它會不會總是被調用? –

+1

正確。我更新了答案。 – Rahul

5

顯然,這個工作現在使用jQuery事件觸發和標準流星事件監聽語法。縱觀自舉旋轉木馬的代碼,它通過執行發出一個自定義jQuery的事件如下:

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... 
    } 
}); 

我是多麼容易驚喜Bootstrap(jQuery)事件與Meteor相關聯。

0

流星,當你觸發事件jQuery的方法(假設它的安裝)

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

點擊#showOffered#searchFilter一個特殊值反應,對結果進行過濾(未顯示):

<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'); 
    } 
})