Ember, mixin to detect click outside of view/component

后端 未结 5 1152
梦谈多话
梦谈多话 2021-01-06 05:48

I\'m writing a Mixin to handle when user clicks outside of a view/component.

This is the mixin:

App.ClickElsewhereMixin = Ember.Mixin.create({

  onC         


        
5条回答
  •  日久生厌
    2021-01-06 06:04

    The current answer doesn't check whether the click was actually outside of the element – a click on the component will also trigger the callback.

    Here's an updated version:

    export default Ember.Mixin.create({
      onOutsideClick: Ember.K,
    
      handleOutsideClick: function(event) {
        let $element = this.$();
        let $target = $(event.target);
    
        if (!$target.closest($element).length) {
          this.onOutsideClick();
        }
      },
    
      setupOutsideClickListener: Ember.on('didInsertElement', function() {
        let clickHandler = this.get('handleOutsideClick').bind(this);
    
        return Ember.$(document).on('click', clickHandler);
      }),
    
      removeOutsideClickListener: Ember.on('willDestroyElement', function() {
        let clickHandler = this.get('handleOutsideClick').bind(this);
    
        return Ember.$(document).off('click', clickHandler);
      })
    });
    

提交回复
热议问题