Ember, mixin to detect click outside of view/component

后端 未结 5 1136
梦谈多话
梦谈多话 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 05:57

    Greg answer have a mistake, that makes removing the clickHandler event not working. Which means that your clickevent will fire even if you destroy the component.

    Here is proper version

    import Ember from 'ember';
    
    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', Ember.run.cancel(this, clickHandler));
      })
    });
    

提交回复
热议问题