2016-04-19 15 views
4

Мне нужно форматировать дату, используя формат, возвращенный обещанием. Я попытался вернуть обещание от toView (значение). Но это не работает.Aurelia - конвертер значений с использованием обещания

@autoinject 
export class DateTimeValueConverter { 

    constructor(private formatService:FormatService) { 
    } 

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

} 

Вот код FormatService, которая работает должным образом

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

Вы можете показать код форматаСервис? – fikkatra

+0

добавленный код FormatService –

ответ

2

Насколько я знаю, вы не можете использовать функции асинхронной в преобразователях значений. Одним из решений, которое я вижу, является передача format в качестве параметра из режима просмотра в преобразователь значений (через представление). Но это означает, что вам нужно получить формат в пределах viewmodel, какой тип разрушает всю точку преобразователей значений ...

Другое решение, которое я вижу, это настроить FormatService так, чтобы он кэшировал формат (при условии, что формат 'не меняется часто). Таким образом, функция getFormat будет синхронной, и вы можете использовать ее в конверторе значений. Конечно, вам нужно будет найти способ инициализировать format в пределах FormatService перед вызовом любых преобразователей значений.

+0

Да, это была только ошибка копирования. Фактически, как я уже упоминал, FormatService работает правильно. Он используется в других ситуациях и возвращает Promise с форматом по назначению. Проблема в том, что я не могу вернуть обещание из метода toView. Он ожидает строку. и просто распечатывает [Object]. –

+0

Ow ok теперь я вижу проблему. Ну, метод toView также возвращает обещание, поэтому вам нужно позвонить «then». Можете ли вы показать код, который использует toView? Или он используется с точки зрения? – fikkatra

+0

он используется с точки зрения. $ {entity.created | DATETIME} –