2016-06-03 5 views
1

Ich habe eine Typoskript-Basisklasse in meinem eckigen Projekt namens "Animal", das für mehrere Arten von Tieren erweitert wird. Hier ist ein Beispielcode zur Veranschaulichung. Jede erweiterte Klasse implementiert ihre eigene "getItems" -Methode und setzt dann "isItemsLoaded", nachdem das Versprechen aufgelöst wurde.Ist es möglich, Code auszuführen, nachdem eine abstrakte erweiterte Methode in Typoskript ausgeführt wird?

abstract class Animal { 

    items: Array<...> = []; 
    isItemsLoaded: boolean = false; 
    abstract getItems(): ng.IPromise<Array<...>>; 
} 

class Hippo extends Animal { 
    getItems() { 
     //return a promise to get a list of hippos 
     return this 
      .getHippos(...) 
      .then(list, => { 
       ... 
       this.isItemsLoaded= true; 
      }); 
    } 
} 

class Tiger extends Animal { 
    getItems() { 
     //return a promise to get a list of tigers 
     return this 
      .getTigers(...) 
      .then(list, => { 
       ... 
       this.isItemsLoaded= true; 
      }); 
    } 
} 

Kann ich irgendwie einen Code anhängen, nachdem die getItems Entschlüssen (wie ein schließlich Methode) in der Tierbasisklasse laufen? Ich wäre verantwortlich für die Einstellung "isItemsLoaded" in der Basis. Ist so etwas möglich?

abstract class Animal { 

    items: Array<...> = []; 
    isItemsLoaded: boolean = false; 
    abstract getItems(): ng.IPromise<Array<...>>.AfterResolved(this.isItemsLoaded = true;); 
} 

Antwort

1

können Sie template method pattern verwenden. Etwas wie dieses:

// stripped down code for simplicity 
abstract class Animal { 
    isItemsLoaded = false; 
    protected abstract getItemsForAnimal(): ng.IPromise<Array<...>>; 

    getItems() { 
     const items = this.getItemsForAnimal(); 
     this.isItemsLoaded = true; 
     return items; 
    } 
} 

class Hippo extends Animal { 
    protected getItemsForAnimal() { 
     // return a promise to get a list of hippos 
    } 
} 
+0

Ja, danke. Ich kam gerade zurück, um zu sagen, dass ich es herausgefunden habe ... :) – Rob

Verwandte Themen