-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Description
Implementing, for example, a draggable element would be so nice like this:
const DraggableView = AmpersandView.extend ({
...
events: {
'mousedown': 'down', // start dragging and set listeners
},
down: function (ev) {
...
// we need to listen on window to handle panning outside the browser
this.listenTo (window, 'mousemove', this.move)
this.listenTo (window, 'mouseup', this.up)
},
move: function (ev) {
...
},
up: function (ev) {
...
// this is way elegant!
this.stopListening (window, 'mousemove')
this.stopListening (window, 'mouseup')
},
})
Being able to do this would have huge advantages over other solutions:
- Defining mousemove and mouseup in the events hash causes atrocities like the element being left behind if the mouse if moved too fast, or being stuck dragging if the mouse is moved outside the window.
- Using
.listenTopreserves the context forthisin the callback function. - The event listeners would be removed when the view was destroyed.
- The
.stopListeningis way more elegant than the DOM's.removeEventListener
I think implementing this should be just as simple as modifying ampersand-events to allow .listenTo and .stopListening on DOM elements. I think the code to stop listening on destruction is already in place and wouldn't need modification.
What do you think? Surely you cannot deny the awesomeness of what this would allow you to do; is this as simple to implement as it seems?
GabeIsman
Metadata
Metadata
Assignees
Labels
No labels