2016-02-24 4 views
1

Следующий код завершается с ошибкой:Машинопись интерфейс не работает

readCandidates is not a function:

Вот код

export class Candidates {  
    private _dataService : ModelContracts.IDataService;  

    constructor(private tag: ModelContracts.ITag, private dataService: ModelContracts.IDataService) { 
     this._value = tag; 
     this._dataService = dataService;   
    } 

    private _value : ModelContracts.ITag; 
    public get value() : ModelContracts.ITag { 
     return this._value; 
    } 
    public set value(v : ModelContracts.ITag) { 
     this._value = v; 
    } 

    candidates = []; 

    activate() {   
     this._dataService.readCandidates().then(candidates => this.candidates = candidates); 
    }  
} 

export interface IDataService { 
    readCandidates(): Promise<ModelContracts.ICandidate[]> 
} 

export class DataService { 
    //some implementation 
} 

Я использую Aurelia пари 1.1.0 и машинопись. Зависимость dataService вводится, но вызов функции не выполняется.

+2

В коде, который вы указали, нет вызовов 'getCandidates'. Проблема должна быть в другой части кода. – zlumer

+0

Да, это опечатка. Я имею в виду «readCanidates» ... –

+0

Невозможно сказать, в чем проблема, если dataService был действительным IDataService, он имел бы функцию 'readCandidates()', и ваше приложение будет работать. –

ответ

1

Если контекст вызова не является классом (например, поскольку вы вызываете activate в качестве обратного вызова или из какого-либо события), вам необходимо убедиться, что вы разобрали свою область действия.

Например:

activate =() => {   
    this._dataService.readCandidates().then(candidates => this.candidates = candidates); 
} 

Хотя есть некоторые лучшие способы сделать это, если вы хотите иметь a consitent approach to handling the responsibility of scope in TypeScript. Рекомендация заключается в том, чтобы обрабатывать область вне класса, поскольку класс не должен знать, как это будет вызвано.

+0

Спасибо за ответ. Это не решает проблему. –

+0

@GenaVerdel, пожалуйста, можете ли вы предоставить немного больше информации о том, где вызывается метод? – Fenton

+0

Спасибо за ответ. Похоже, я могу «действительно использовать интерфейсы с инъекцией зависимостей в аурелии». –

0

невозможно использовать интерфейсы с DI в aurelia.

Смежные вопросы