1

問題がどこにあるのか正確にはわからないので、実際のコードを説明するのは難しいですが、Ember.

mouse moveone 内で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;
    });
4

0 に答える 0