很难解释实际的代码,因为我不完全知道问题出在哪里,但是如果有人能帮助解释事件是如何被委托/冒泡的,那就太好了Ember
。
我有一种情况,其中mouse move
ondocument
没有在 one 内部触发view
。view
当使用动态插入时会发生这种情况outlets
。
鼠标移动绑定代码:
MOVE_EVENT = touch ? 'touchmove' : 'mousemove',
$(document).on(MOVE_EVENT, function (e) {
console.log('move event move=true');
if (move) {
e.preventDefault();
stop = getY(e);
//console.log('move event move=true');
var val = pos + (start - stop) / h;
val = val > (max + 1) ? (max + 1) : val;
val = val < (min - 1) ? (min - 1) : val;
inst.scroll(target, val);
}
});
如果我使用默认情况下在插座中显示视图的路由器 URL 加载页面,则鼠标在视图内移动会触发 body 上的 mousemove。当我通过更改状态进入视图时,它不会发生:这是导致行为的状态变化的日志。
mouse move in repeat view
move event move=true
mouse move in repeat view
move event move=true
STATEMANAGER: Sending event 'chooseSkipTime' to state root.ote.
STATEMANAGER: Entering null
STATEMANAGER: Entering root
STATEMANAGER: Entering root.ote
STATEMANAGER: Entering root.ote.repeat
STATEMANAGER: Entering root.ote.repeat.skiptimes
STATEMANAGER: Entering root.ote.repeat.skiptimes.index
skiptimes view Inserted
skiptimes 被插入到 oulet 上RepeatView
。在这样的状态改变之后,鼠标内部的移动repeat view
没有被触发,或者它没有触发 mousemove on document
。与此同时,当我将鼠标移到 parentview( RepatView
) 区域之外时,鼠标移动会显示日志。
简而言之,不会触发视图内的 mousemove。我放了:
mouseMove : function(e){
console.log('Mouse Move in Blah Blah View');
}
在RepeatView
包括 在内的每个视图中RepeatView
,都没有触发。但是当显示日志时,鼠标在父级上的RepeatView
移动会触发。
很难解释实际的代码,因为我不完全知道问题出在哪里,但是如果有人可以帮助解释事件是如何在 Ember 中被委托/冒泡的,那就太好了。
更新
经过进一步调查,似乎 ember-latest 中的以下 stopPropogation 导致了这种情况,但尚无法理解为什么会发生这种情况。
setupHandler: function(rootElement, event, eventName) {
var self = this;
rootElement.delegate('.ember-view', event + '.ember', function(evt, triggeringManager) {
var view = Ember.View.views[this.id],
result = true, manager = null;
manager = self._findNearestEventManager(view,eventName);
if (manager && manager !== triggeringManager) {
result = self._dispatchEvent(manager, evt, eventName, view);
} else if (view) {
result = self._bubbleEvent(view,evt,eventName);
} else {
//evt.stopPropagation();
}
return result;
});