2016-07-19 4 views
2

Ich habe eine Reihe von Ländern als const definiert CountriesList:Machen Sie eine Kette von Methoden mit Typoskript

[{ 
    name: "Afghanistan", 
    id: "4", 
    alpha2Code: "AF", 
    alpha3Code: "AFG", 
    numericCode: 4 
}, 
...] 

Ich habe eine statische Klasse Countries, die unterschiedlich formatiert und gefiltert Länder aus der konst oben zurückzukehren soll.

export class Countries { 
public static getCountries() { 
    return CountriesList; 
} 

public static getFilteredCountries(setName: string) { 
    return CountriesList 
     .filter(function (country, index) { 
      return customFilter(setName, country, index) 
     }); 
} 

public static formatForSelectInput(items: ICountryIso3166[]) { 
    return items.map(function (country) { 
     return { 
      title: L(country.name), 
      data: country.id, 
      value: country.name 
     }; 
    }) 
} 
} 

Jetzt, da es Typoskript ist und es seine eigenen Regeln hat, habe ich keine Ahnung, wie Methoden zur Kette, um es wie dies funktioniert:

var countryItems = Countries 
    .getFilteredCountries('test') 
    .formatForSelectInput(); 

Soll ich ein neues Objekt, so dass nicht bloßes Array, sondern ein Array innerhalb eines Wrapper-Objekts mit entsprechenden Methoden, oder wie führe ich die Verkettung richtig aus?

Bitte beraten.

Antwort

5

Sie möchten Methoden verketten, also möchten Sie sie für ein Objekt aufrufen, keine statische Klasse. So etwas wie die statische aus Countries Entfernen und Ändern Sie den Code zu

var countryItems = new Countries() 
    .getFilteredCountries('test') 
    .formatForSelectInput(); 

Jede Methode, wo Sie zulassen möchten Verkettungs dann mit return this; enden sollte. Sie sollten auch die Rückgabetypen Ihrer Methoden deklarieren (um die Klasse Countries zu sein).

Verwandte Themen