Prechádzať zdrojové kódy

fix some rendering problems

Adam Shaw 7 rokov pred
rodič
commit
b0a0c9d9d3

+ 3 - 0
src/Calendar.ts

@@ -546,6 +546,9 @@ export default class Calendar {
       renderedView.setElement(
         createElement('div', { className: 'fc-view fc-' + renderedView.type + '-view' })
       )
+    } else {
+      // because removeElement must have been called previously, which unbinds global handlers
+      renderedView.bindGlobalHandlers()
     }
 
     if (!renderedView.el.parentNode) {

+ 3 - 11
src/agenda/TimeGrid.ts

@@ -213,8 +213,9 @@ export default class TimeGrid extends DateComponent {
 
 
   unrenderDates() {
-    // this.unrenderSlats(); // don't need this because repeated .html() calls clear
     this.unrenderColumns()
+    // we don't unrender slats because won't change between date navigation,
+    // and if slat-related settings are changed, the whole component will be rerendered.
   }
 
 
@@ -381,16 +382,7 @@ export default class TimeGrid extends DateComponent {
 
 
   unrenderContentSkeleton() {
-    if (this.contentSkeletonEl) { // defensive :(
-      removeElement(this.contentSkeletonEl)
-      this.contentSkeletonEl = null
-      this.colContainerEls = null
-      this.helperContainerEls = null
-      this.fgContainerEls = null
-      this.bgContainerEls = null
-      this.highlightContainerEls = null
-      this.businessContainerEls = null
-    }
+    removeElement(this.contentSkeletonEl)
   }
 
 

+ 6 - 8
src/component/renderers/EventRenderer.ts

@@ -76,9 +76,7 @@ export default class EventRenderer {
       }
     }
 
-    if (this.renderBgSegs(bgSegs) !== false) { // no failure?
-      this.bgSegs = bgSegs
-    }
+    this.bgSegs = this.renderBgSegs(bgSegs)
 
     // render an `.el` on each seg
     // returns a subset of the segs. segs that were actually rendered
@@ -119,9 +117,9 @@ export default class EventRenderer {
   }
 
 
-  renderBgSegs(segs: Seg[]): false | void {
+  renderBgSegs(segs: Seg[]): Seg[] {
     if (this.fillRenderer) {
-      this.fillRenderer.renderSegs('bgEvent', segs, {
+      return this.fillRenderer.renderSegs('bgEvent', segs, {
         getClasses: (seg) => {
           return this.getBgClasses(seg.eventRange.eventDef)
         },
@@ -134,9 +132,9 @@ export default class EventRenderer {
           return this.filterEventRenderEl(seg.eventRange, el)
         }
       })
-    } else {
-      return false // signal failure if no fillRenderer
     }
+
+    return []
   }
 
 
@@ -205,7 +203,7 @@ export default class EventRenderer {
     }
 
     // event is currently selected? attach a className.
-    if (seg.eventRange.eventInstance.instanceId === this.component.selectedEventInstanceId) {
+    if (seg.eventRange.eventInstance.instanceId === this.component.eventSelection) {
       classes.push('fc-selected')
     }
 

+ 1 - 0
src/interactions/EventHovering.ts

@@ -23,6 +23,7 @@ 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)
   }