1

很难解释实际的代码,因为我不完全知道问题出在哪里,但是如果有人能帮助解释事件是如何被委托/冒泡的,那就太好了Ember

我有一种情况,其中mouse moveondocument没有在 one 内部触发viewview当使用动态插入时会发生这种情况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;
    });
4

0 回答 0