2014-11-07 4 views
0

Я занимаюсь созданием первой итерации API. Одна из необходимых вещей - это настраиваемые события для тех, кто собирается использовать наш API. У меня возникли проблемы с поиском хорошей документации о том, как строить такие вещи.Определение пользовательских событий для API-интерфейса TypeScript

У нас есть интерфейс для нашего API, где я надеюсь определить эти пользовательские события.

interface AddinApi{ 
    /** 
    * Event fires when a document is opened. 
    * 
    * @param {string}  The url of the of the document you are listening on. 
    * 
    * @return The url of the opened document 
    */ 
    documentOpenedEvent(url: string): void; 
} 

Я знаю, что здесь что-то отсутствует. Нужно ли мне определять какой-либо пользовательский объект, который реализует/расширяет какой-либо класс событий в качестве параметра?

Желаемая функциональность этого события будет заключаться в том, что пользователь может присоединить это событие к определенному документу, и когда этот документ будет открыт, событие будет срабатывать.

Это может быть вызвано следующим образом. Это более или менее псевдокод.

var api : AddinApi; 

// Define document object with some url/guid 
var docGUID = "123456; 

function onDocumentOpened(url: documentGuid){ 
    // do something now that the document has been opened 
} 

api.documentOpenedEvent = onDocumentOpened; 

// Now this function fires off when the document is opened. 
api.documentOpenedEvent(docGuid); 
+1

Это не очень понятно. Можете ли вы опубликовать несколько примеров того, как будет выглядеть код вызова? –

ответ

0

Предполагаете, вы хотели бы реализовать простой Observer pattern.

Затем код довольно прост:

Notifier:

class Notifier { 
    private _subscribers : Array<ISubscriber>; 

    constructor() { 
    this._subscribers = new Array<ISubscriber>(); 
    } 

    subscribe(o : ISubscriber) : void { 
    this._subscribers.push(o); 
    } 

    myMethod() : void { 
    // Trigger this method whenever you wish 
    for (var i = 0; i < this._subscribers.length; i++) { 
     // Notify each subscriber 
     this._subscribers[i].onMyCustomEvent(); 
    } 
    } 
} 

Абонентский интерфейс:

interface ISubscriber { 
    onMyCustomEvent() : void; 
} 

Наконец, вы можете создавать свои собственные аргументы события. Вы должны использовать его только при уведомлении подписчиков.

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