問題がどこにあるのか正確にはわからないので、実際のコードを説明するのは難しいですが、Ember
.
mouse move
one 内でondocument
がトリガーされない場合があり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 is inserted into an oulet on RepeatView
. After such a state change the mouse move inside repeat view
is not getting triggered, or it is not triggering the mousemove on document
. At this same time as I move mouse outside the area of the parentview(RepatView
) then mouse move shows log.
In a nutshell mousemove inside a view is not triggered. I have put:
mouseMove : function(e){
console.log('Mouse Move in Blah Blah View');
}
in every view inside RepeatView
including RepeatView
, none triggers. But mouse move on Parent of RepeatView
and upwards is triggering as logs are shown.
It is hard to expliain the actual code as i dont exactly know where the problem is, but it will be great if anyone can help in explaining how events are delegatd/bubbled in Ember.
UPDATE
さらに調査した結果、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;
});