2013-03-22 47 views
2

我試圖在ember.js中實現滑塊視圖;爲此我需要捕獲mouseMove事件,即使它離開了第一個接收到的事件。在純JS,我會做這樣的事情:在ember.js中捕獲mouseMove事件

element.addEventListener 'mousemove', ..., true // true means 'capture event' 

這也具有的事件,即使鼠標離開瀏覽器窗口,模仿的方式UI控件的行爲在捕獲元素被解僱的很好的副作用本機應用。

我似乎無法在ember.js中找到一種方法,但我確定我忽略了一些東西。如果不是的話,那麼推薦的做法是什麼?

回答

2

不幸的是,EventDispatcher,它處理的根元素(通常body)上設置默認的事件處理程序,並沒有做任何範圍mouseMove向比它實際發生其他視圖。

你可以看看onDragonDragStartonDragEnddragStartdragdragEnd在灰燼的說法),其按規格應在源元素上,無論他們碰巧在那裏被解僱,因而火視圖事件。

您可以自己手動分配處理程序到body。在mouseLeave處理程序中爲mouseUpmouseMove添加處理程序,並在mouseEnter(以防止重複)和mouseUp處理程序中刪除它們。

要做到這一點最簡單的方法是使用on

$('body').on('mouseMove.custom', $.proxy(this.yourHandler, this)); 

,然後刪除:

$('body').off('mouseMove.custom') 
+0

我結束了對身體增加聽衆,完美的作品! – 2013-03-23 21:18:19

+0

我編輯了我的答案,將鼠標移動事件的骨頭範圍刪除回到您的視圖。聽衆應該在沒有選擇器範圍的「身體」上。 – 2013-03-23 22:09:51

0

一個人觀看一個老問題的更新。現在,組件中包含一個mouseMove和其他內置的事件處理程序,以及添加定製程序的功能。

https://guides.emberjs.com/v2.12.0/components/handling-events/

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    mouseMove() { 
     //do stuff 
    } 
});