У меня есть тип общественной машинописи так:машинопись обратного вызова внешнего файл привязка «это» ключевым словом
export class Generator {
public generate(settings: GeneratorSettings): void {
$('#' + settings.Id+ "").dataTable({
dom: 'RC<"clear">rti<"bottom"pl>',
sAjaxSource: settings.sourceUrl,
bServerSide: true,
pageLength: 15,
lengthMenu: [15, 25, 50, 100],
fnDrawCallback: (oSettings) => { this.internalCallback(oSettings); settings.publicCallback(); }
});
}
private internalCallback(oSettings: any) {
// Do work
}
В этом случае я использую библиотеку третьей стороны (JQuery DataTables), который обеспечивает функцию обратного вызова. Чтобы пользователи, использующие этот тип позже, подключались к событиям, я включил в свои настройки общедоступное свойство publicCallback
, которое пользователи этого типа могут установить в свою собственную функцию.
Одним из примеров publicCallback
используется это:
В HTML инлайн сценарий у меня есть:
settings.publicCallback = externalModule.initialise;
Где externalModule
является экземпляром другого типа машинопись следующим образом:
export class ExternalModule {
public initialise() {
// Various things happen before here
$("#button").on("click", (event) => {
this.buildIdList(event);
});
}
private process(event: any){
// Doing work
}
Моя проблема заключается в функции ExternalModule.initialise
. Поскольку он вызывается из другого модуля TypeScript, ключевое слово this
в этой точке является параметром settings
, на котором существует свойство publicCallback
.
Я прочитал ключевое слово this
, и я понимаю, почему это происходит, однако я не могу найти способ обойти его. Я пытался делать следующее в Generator
типа:
fnDrawCallback: (oSettings) => { this.internalCallback(oSettings); settings.publicCallback.bind(settings.publicCallback)();
Но это делает не поможет, так как теперь this
ключевых слов точек на только методом initialise
.
Когда у вас есть доступ к этому, вам нужно сохранить его в переменной и получить доступ к этой переменной – 2426021684
У меня никогда не возникает проблемы с этим контекстом, который я хочу. Как только вызывается функция 'initialize',' this' имеет контекст параметра 'settings' - нет возможности зафиксировать правильный контекст. – FLSH