From 9463ffdf4cc66204a12d1272860b30b1bb941662 Mon Sep 17 00:00:00 2001 From: Alex Ritter Date: Sat, 9 Jul 2022 00:35:02 +0200 Subject: [PATCH] Final changes --- src/abstract/DomainViews.ts | 21 +++++++++------------ src/abstract/View.ts | 4 +++- src/canvas/model/Frames.ts | 10 +++++----- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/abstract/DomainViews.ts b/src/abstract/DomainViews.ts index 4c5c136a2..3a68eb294 100644 --- a/src/abstract/DomainViews.ts +++ b/src/abstract/DomainViews.ts @@ -1,13 +1,13 @@ import { includes } from 'underscore'; import Backbone from 'backbone'; import View from './View'; +import Collection from './Collection'; import Model from './Model'; -/*interface DomainView{ - constructor(model: TModel): TView -}*/ -type TModel = TCollection extends Backbone.Collection? TModel: Model; -export default abstract class DomainViews, TItemView extends View> extends View> { +export default abstract class DomainViews< + TCollection extends Collection, + TItemView extends View +> extends View { // Defines the View per type itemsView = ''; @@ -26,7 +26,7 @@ export default abstract class DomainViews) { + private addTo(model: Model) { this.add(model); } @@ -35,7 +35,7 @@ export default abstract class DomainViews, itemType: string): TItemView; + protected abstract renderView(model: Model, itemType: string): TItemView; /** * Render new model inside the view @@ -43,7 +43,7 @@ export default abstract class DomainViews, fragment?: DocumentFragment) { + private add(model: Model, fragment?: DocumentFragment) { const { reuseView, viewCollection, itemsView = {} } = this; var frag = fragment || null; var typeField = model.get(this.itemType); @@ -69,10 +69,7 @@ export default abstract class DomainViews { - this.add(model, frag); - }, this); + if (this.collection.length) this.collection.each(model => this.add(model, frag)); this.$el.append(frag); this.onRender(); diff --git a/src/abstract/View.ts b/src/abstract/View.ts index 72093d1ef..074955996 100644 --- a/src/abstract/View.ts +++ b/src/abstract/View.ts @@ -10,6 +10,8 @@ type Module = TItem extends Collection = TItem extends Collection ? TItem : unknown; + export default class View< TModel extends Model | Collection = Model, TElement extends Element = HTMLElement @@ -22,7 +24,7 @@ export default class View< return this.em.config.stylePrefix || ''; } - collection!: TModel extends Collection ? TModel : Collection; + collection!: TModel extends Model ? Collection : TModel; protected get module(): Module { return (this.model as any)?.module ?? this.collection.module; diff --git a/src/canvas/model/Frames.ts b/src/canvas/model/Frames.ts index e69f3ca28..90506571a 100644 --- a/src/canvas/model/Frames.ts +++ b/src/canvas/model/Frames.ts @@ -1,6 +1,6 @@ import { bindAll } from 'underscore'; import CanvasModule from '..'; -import { Collection } from '../../common'; +import { Collection } from '../../abstract'; import Page from '../../pages/model/Page'; import Frame from './Frame'; @@ -8,10 +8,10 @@ export default class Frames extends Collection { loadedItems = 0; itemsToLoad = 0; page?: Page; - module: CanvasModule + module: CanvasModule; constructor(module: CanvasModule, models: Frame[] = []) { - super(models); + super(module, models, Frame); this.module = module; bindAll(this, 'itemLoaded'); this.on('reset', this.onReset); @@ -20,7 +20,7 @@ export default class Frames extends Collection { onReset(m: Frame, opts?: { previousModels?: Frame[] }) { const prev = opts?.previousModels || []; - prev.map((p) => this.onRemove(p)); + prev.map(p => this.onRemove(p)); } onRemove(removed?: Frame) { @@ -43,6 +43,6 @@ export default class Frames extends Collection { } listenToLoadItems(on: boolean) { - this.forEach((item) => item[on ? 'on' : 'off']('loaded', this.itemLoaded)); + this.forEach(item => item[on ? 'on' : 'off']('loaded', this.itemLoaded)); } }