浏览代码

introducing disposeAll for the viewer.
As it is possible to have more than one viewer instance on the same page, disposeAll will dispose all of the viewers AND the context of the rest of the singletons.

Raanan Weber 7 年之前
父节点
当前提交
7b110586b2

+ 12 - 3
Viewer/src/configuration/loader.ts

@@ -11,7 +11,7 @@ export class ConfigurationLoader {
 
 
     private loadRequests: Array<IFileRequest>;
     private loadRequests: Array<IFileRequest>;
 
 
-    constructor() {
+    constructor(private _enableCache: boolean = false) {
         this.configurationCache = {};
         this.configurationCache = {};
         this.loadRequests = [];
         this.loadRequests = [];
     }
     }
@@ -77,12 +77,21 @@ export class ConfigurationLoader {
 
 
     private loadFile(url: string): Promise<any> {
     private loadFile(url: string): Promise<any> {
         let cacheReference = this.configurationCache;
         let cacheReference = this.configurationCache;
-        if (cacheReference[url]) {
+        if (this._enableCache && cacheReference[url]) {
             return Promise.resolve(cacheReference[url]);
             return Promise.resolve(cacheReference[url]);
         }
         }
 
 
         return new Promise((resolve, reject) => {
         return new Promise((resolve, reject) => {
-            let fileRequest = Tools.LoadFile(url, resolve, undefined, undefined, false, (request, error: any) => {
+            let fileRequest = Tools.LoadFile(url, (result) => {
+                let idx = this.loadRequests.indexOf(fileRequest);
+                if (idx !== -1)
+                    this.loadRequests.splice(idx, 1);
+                if (this._enableCache) cacheReference[url] = result;
+                resolve(result);
+            }, undefined, undefined, false, (request, error: any) => {
+                let idx = this.loadRequests.indexOf(fileRequest);
+                if (idx !== -1)
+                    this.loadRequests.splice(idx, 1);
                 reject(error);
                 reject(error);
             });
             });
             this.loadRequests.push(fileRequest);
             this.loadRequests.push(fileRequest);

+ 4 - 0
Viewer/src/configuration/mappers.ts

@@ -118,6 +118,10 @@ export class MapperManager {
         this.mappers[type] = mapper;
         this.mappers[type] = mapper;
     }
     }
 
 
+    public dispose() {
+        this.mappers = {};
+    }
+
 }
 }
 
 
 export let mapperManager = new MapperManager();
 export let mapperManager = new MapperManager();

+ 4 - 0
Viewer/src/eventManager.ts

@@ -37,4 +37,8 @@ export class EventManager {
             callbackDef.callback(data);
             callbackDef.callback(data);
         });
         });
     }
     }
+
+    public dispose() {
+        this.callbacksContainer = {};
+    }
 }
 }

+ 7 - 0
Viewer/src/index.ts

@@ -17,6 +17,7 @@ import '../assets/pep.min';
 
 
 
 
 import { InitTags } from './initializer';
 import { InitTags } from './initializer';
+import { configurationLoader } from './configuration/loader';
 
 
 // promise polyfill, if needed!
 // promise polyfill, if needed!
 PromisePolyfill.Apply();
 PromisePolyfill.Apply();
@@ -29,5 +30,11 @@ function init(event) {
     InitTags();
     InitTags();
 }
 }
 
 
+function disposeAll() {
+    viewerManager.dispose();
+    mapperManager.dispose();
+    configurationLoader.dispose();
+}
+
 // public API for initialization
 // public API for initialization
 export { InitTags, DefaultViewer, AbstractViewer, viewerManager, mapperManager };
 export { InitTags, DefaultViewer, AbstractViewer, viewerManager, mapperManager };

+ 1 - 0
Viewer/src/templateManager.ts

@@ -164,6 +164,7 @@ export class TemplateManager {
             this.templates[template].dispose();
             this.templates[template].dispose();
         });
         });
         this.templates = {};
         this.templates = {};
+        this.eventManager.dispose();
 
 
         this.onInit.clear();
         this.onInit.clear();
         this.onAllLoaded.clear();
         this.onAllLoaded.clear();

+ 6 - 0
Viewer/src/viewer/viewerManager.ts

@@ -58,6 +58,12 @@ export class ViewerManager {
         this.onViewerAdded && this.onViewerAdded(viewer);
         this.onViewerAdded && this.onViewerAdded(viewer);
         this.onViewerAddedObservable.notifyObservers(viewer);
         this.onViewerAddedObservable.notifyObservers(viewer);
     }
     }
+
+    public dispose() {
+        for (let id in this.viewers) {
+            this.viewers[id].dispose();
+        }
+    }
 }
 }
 
 
 export let viewerManager = new ViewerManager();
 export let viewerManager = new ViewerManager();