فهرست منبع

optimal eventMouseout

Adam Shaw 7 سال پیش
والد
کامیت
94331878e8
2فایلهای تغییر یافته به همراه11 افزوده شده و 5 حذف شده
  1. 7 0
      src/component/DateComponent.ts
  2. 4 5
      src/interactions/EventHovering.ts

+ 7 - 0
src/component/DateComponent.ts

@@ -18,6 +18,7 @@ import { Hit } from '../interactions/HitDragging'
 import { DateRange, rangeContainsMarker } from '../datelib/date-range'
 import EventApi from '../api/EventApi'
 import { createEventInstance, parseEventDef } from '../structs/event'
+import EmitterMixin from '../common/EmitterMixin'
 
 
 export interface DateComponentRenderState {
@@ -72,6 +73,7 @@ export default abstract class DateComponent extends Component {
   isRTL: boolean = false // frequently accessed options
   nextDayThreshold: Duration // "
   view: View
+  emitter: EmitterMixin = new EmitterMixin()
 
   eventRenderer: any
   helperRenderer: any
@@ -288,6 +290,11 @@ export default abstract class DateComponent extends Component {
 
 
   triggerWillRemoveSegs(segs: Seg[]) {
+
+    for (let seg of segs) {
+      this.emitter.trigger('eventElRemove', seg.el)
+    }
+
     if (this.hasPublicHandlers('eventDestroy')) {
       let calendar = this.getCalendar()
 

+ 4 - 5
src/interactions/EventHovering.ts

@@ -23,18 +23,17 @@ export default class EventHovering {
       this.handleSegLeave
     )
 
-    // TODO: find less expensive way to do this. generates lots of EventApi's
-    component.getCalendar().on('eventDestroy', this.handleEventDestroy)
+    component.emitter.on('eventElRemove', this.handleEventElRemove)
   }
 
   destroy() {
     this.removeHoverListeners()
-    this.component.getCalendar().off('eventDestroy', this.handleEventDestroy)
+    this.component.emitter.off('eventElRemove', this.handleEventElRemove)
   }
 
   // for simulating an eventMouseout when the event el is destroyed while mouse is over it
-  handleEventDestroy = (arg) => {
-    if (arg.el === this.currentSegEl) {
+  handleEventElRemove = (el: HTMLElement) => {
+    if (el === this.currentSegEl) {
       this.handleSegLeave(null, this.currentSegEl)
     }
   }