export class Event<Callback extends Function, Options> { private Callbacks: Callback[] = []; public Add(callback: Callback): ITypedSubscription<Callback, Event<Callback, Options>> { var that = this; var res: ITypedSubscription<Callback, Event<Callback, Options>> = { Callback: callback, Event: that, Unsubscribe: function () { that.Remove(callback); } } this.Callbacks.push(callback); return res; } public Remove(callback: Callback): void { var filteredList: Callback[] = []; for (var i = 0; i < this.Callbacks.length; i++) { // . if (this.Callbacks[i] !== callback) { filteredList.push(callback); } } this.Callbacks = filteredList; } public Trigger(options: Options): void { for (var i = 0; i < this.Callbacks.length; i++) { this.Callbacks[i](options); } } }
Event
class: Event<Callback extends Function, Options>
Callback
is some arbitrary function that does not have a specific signature, and the second argument type is a type of object that we then use to call the callbacks added to the event. Those. the parameters are not interconnected and in this implementation it is just elementary to shoot a leg without agreeing on these parameters, which an inexperienced developer most likely will not do. function Boo(callback: (strings: string[]) => string) { /* */ }
export interface IDelegateTest { (options: any); } var test: IDelegateTest = function (options: any) { }
// var test: IDelegateTest = function (settings: any) { }
// var test: IDelegateTest = function (options?: any) { }
// , var test: IDelegateTest = function () { }
// !!! var test: IDelegateTest = function (options: number) { }
options
declared as any
, which forgives everything. Honestly, I spent about 10 minutes until I understood the reason “in three pines”. I hope that no one else will fall into this trap. export interface IDelegateTest { // (options: string); } // Cannot convert '(options: number) => void' to 'IDelegateTest' var test1: IDelegateTest = function (options: number) { } //Call signatures of types '(options?: number) => void' and 'IDelegateTest' are incompatible. var test2: IDelegateTest = function (options?: number) { } // var test3: IDelegateTest = function (settings: string) { }
export interface ICallback<ArgType> { (arg: ArgType, context?: any); }
options
parameter is our typed parameter, and context
allows us to specify the object that caused the event, which can be useful if the event is triggered by some third object and needs to be monitored. I’ll draw your attention to the fact that the context is not controlled from the subscriber in any way, unlike Backbone.Events, in which the context is set by the subscriber for the separation of similar handlers.context
first, according to the traditions of C #: (object sender, EventArgs args)
, then the TS compiler will not be able to track the correspondence of function types. I do not know what it is: a bug or a feature, but you should pay attention to it. If the typed parameters are at the beginning, then everything works predictably. What suits me completely in the context of the article. export interface ICallbackDesc<ArgType> { Callback: ICallback<ArgType>; Subscriber: any; }
ICallbackDesc
we need to store information about the context in which the callback should be called. Those. we have to remember what value this should get in the callback, otherwise we just won't be able to work fully.Event
class: export class Event<ArgType> { private Callbacks: ICallbackDesc<ArgType>[] = []; /** * @param {ICallback<ArgType>} callback Callback, * @param {any} subscriber , callback * @returns {ITypedSubscription<ArgType>} */ public Subscribe(callback: ICallback<ArgType>, subscriber: any): ITypedSubscription<ArgType> { var that = this; var res: ITypedSubscription<ArgType> = { Callback: callback, Event: that, Unsubscribe: function () { that.Unsubscribe(callback); } } this.Callbacks.push({ Callback: callback, Subscriber: subscriber }); return res; } public Unsubscribe(callback: ICallback<ArgType>): void { // } public Trigger(arg: ArgType, context?: any): void { // } }
Callback
(renamed to Delegate
) always implements the ICallback.
Trigger :
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
interface ICallback.
Trigger :
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
ICallback.
Trigger
:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { // }
, :
export class MessagesRepo { public MessagesLoaded = new Events.Event<string[]>(); public ErrorHappened = new Events.Event<ErrorHappenedOptions>(); }
:
public Subscribe() { // this.Subscriptions.push(MessagesRepoInstance.MessagesLoaded.Subscribe(function (messages: string[], context?: any) { alert(messages && messages.length > 0 ? messages[0] : 'Nothing'); }, this)); // this.Subscriptions.push(MessagesRepoInstance.ErrorHappened.Subscribe(function (error: ErrorHappenedOptions) { alert(error.Error); }, this)); }
// context subscriber.MessagesRepo.MessagesLoaded.Trigger(['Test message 1'], this); // subscriber.MessagesRepo.ErrorHappened.Trigger({ Error: 'Test error 1' });
Unsubscribe
:
public Unsubscribe(callback: ICallback<ArgType>): void { var filteredList: ICallbackDesc<ArgType>[] = []; for (var i = 0; i < this.Callbacks.length; i++) { if (this.Callbacks[i].Callback !== callback) { filteredList.push(this.Callbacks[i]); } } this.Callbacks = filteredList; }
!==
. . () - , . , , Unsubscribe
. .. .., , , . .
? . , JS , , TS, . - .
.. :
public static Main(): void { var subscriber1: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); var subscriber2: Messages.SomeEventSubscriber = new Messages.SomeEventSubscriber(); subscriber1.Subscribe(); subscriber2.Subscribe(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 1'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 1' }); subscriber1.Destroy(); Messages.MessagesRepoInstance.MessagesLoaded.Trigger(['Test message 2'], this); Messages.MessagesRepoInstance.ErrorHappened.Trigger({ Error: 'Test error 2' }); }
2 'Test message 1' 'Test error 1', 'Test message 2' 'Test error 2'.
apply:
public Trigger: ICallback<ArgType> = function (arg: ArgType, context?: any) { var callbacks: ICallbackDesc<ArgType>[] = this.Callbacks; for (var i = 0; i < callbacks.length; i++) { callbacks[i].Callback.apply(callbacks[i].Subscriber, [arg, context]); } }
. .
Upd. . .
Source: https://habr.com/ru/post/185290/
All Articles