2013-03-22 59 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 
    } 
});