2016-04-19 26 views
4

Ich muss Datum formatieren mit Format von Versprechen zurückgegeben. Ich habe versucht, Versprechen von toView (Wert) zurückzugeben. Aber das funktioniert nicht.Aurelia - Wertkonvertierung mit Versprechen

@autoinject 
export class DateTimeValueConverter { 

    constructor(private formatService:FormatService) { 
    } 

    toView(value) { 
     return this.formatService.getFormat().then(format=> 
      moment(value).format(format) 
     ); 
    } 

} 

Hier FormatService der Code, der richtig

export class FormatService { 

    private format; 

    constructor(private http:AppHttp) { 
     this.format= null; 
    } 

    public getFormat() : Promise<string>{ 

     if (this.format){ 
      var promise = new Promise<string>((resolve, reject)=>{ 
       resolve(this.format); 
      }); 
      return promise; 
     } 

     return this.http.get('format') 
      .then((format) => { 
       if (format){ 
        this.format= format; 
       } 
       return format; 
      }); 
     } 
} 
+0

können Sie den Code von formatService anzeigen? – fikkatra

+0

FormatService-Code in Frage –

Antwort

2

Soweit ich weiß, kann man nicht Asynchron-Funktionalität innerhalb Wertwandler verwenden funktioniert. Eine Lösung, die ich sehe, ist, den format als Parameter vom Viewmodel an den Wertkonverter (durch die Ansicht) zu übergeben. Aber das bedeutet, dass Sie das Format innerhalb des Viewmodels holen müssen, das den ganzen Punkt der Wertkonverter zerstört ...

Eine andere Lösung, die ich sehe, ist, FormatService so einzustellen, dass es das Format zwischenspeichert (vorausgesetzt, dass 'Format 'ändert sich nicht oft). Auf diese Weise wird die getFormat-Funktion synchron und Sie können sie innerhalb des Wertkonverters verwenden. Natürlich müssen Sie einen Weg finden, format innerhalb FormatService zu initialisieren, bevor Wertwandler aufgerufen werden.

+0

hinzugefügt Ja, das war nur Kopierfehler. Wie bereits erwähnt, funktioniert FormatService einwandfrei. Es wird in anderen Situationen verwendet und gibt Promise mit dem gewünschten Format zurück. Das Problem ist, dass ich Versprechen von der ToView-Methode nicht zurückgeben kann. Es erwartet eine Zeichenkette. und druckt [Objekt] aus. –

+0

Ow ok jetzt sehe ich das Problem. Nun, die toView-Methode gibt auch ein Versprechen zurück, also müssen Sie 'then' aufrufen. Können Sie den Code anzeigen, der toView verwendet? Oder wird es aus der Sicht verwendet? – fikkatra

+0

wird es aus der Sicht verwendet. $ {entity.created | Terminzeit} –