Procházet zdrojové kódy

better hack for passing up View in constructors

Adam Shaw před 7 roky
rodič
revize
99dce1abb9

+ 1 - 0
src/Calendar.ts

@@ -419,6 +419,7 @@ export default class Calendar {
 
       component = this.component = new CalendarComponent({
         calendar: this,
+        view: null, // HACK. will get populated by Component
         dateEnv: this.dateEnv,
         theme: this.theme,
         options: this.optionsManager.computed

+ 1 - 0
src/CalendarComponent.ts

@@ -164,6 +164,7 @@ export default class CalendarComponent extends Component<CalendarComponentProps>
       view = this.view = new viewSpec['class'](
         {
           calendar: this.calendar,
+          view: null, // HACK. will get populated by Component
           dateEnv: this.dateEnv,
           theme: this.theme,
           options: viewSpec.options

+ 3 - 9
src/View.ts

@@ -67,17 +67,11 @@ export default abstract class View extends DateComponent<ViewProps> {
 
   constructor(context: ComponentContext, viewSpec: ViewSpec, dateProfileGenerator: DateProfileGenerator, parentEl: HTMLElement) {
     super(
-      {
-        options: context.options,
-        dateEnv: context.dateEnv,
-        theme: context.theme,
-        calendar: context.calendar
-      },
-      createElement('div', { className: 'fc-view fc-' + viewSpec.type + '-view' })
+      context,
+      createElement('div', { className: 'fc-view fc-' + viewSpec.type + '-view' }),
+      true // isView (HACK)
     )
 
-    this.context.view = this // for when passing context to children
-
     this.viewSpec = viewSpec
     this.dateProfileGenerator = dateProfileGenerator
     this.type = viewSpec.type

+ 8 - 2
src/component/Component.ts

@@ -11,7 +11,7 @@ export interface ComponentContext {
   dateEnv: DateEnv
   theme: Theme
   calendar: Calendar
-  view?: View
+  view: View
 }
 
 export type EqualityFuncHash = { [propName: string]: (obj0, obj1) => boolean }
@@ -31,7 +31,13 @@ export default class Component<PropsType> {
   calendar: Calendar
   isRtl: boolean
 
-  constructor(context: ComponentContext) {
+  constructor(context: ComponentContext, isView?: boolean) {
+
+    // HACK to populate view at top of component instantiation call chain
+    if (isView) {
+      context.view = this as any
+    }
+
     this.uid = String(guid++)
     this.context = context
     this.dateEnv = context.dateEnv

+ 2 - 2
src/component/DateComponent.ts

@@ -58,8 +58,8 @@ export default class DateComponent<PropsType> extends Component<PropsType> {
   needHitsDepth: number = 0
 
 
-  constructor(context: ComponentContext, el: HTMLElement) {
-    super(context)
+  constructor(context: ComponentContext, el: HTMLElement, isView?: boolean) {
+    super(context, isView)
 
     this.el = el