Cześć, mam taką sytuację (typescript), nieistotne elementy w kodzie pominąłem dla czytelności:
export class MyClass {
foo(){
this._ajaxManager.doSth(url,
function(sender: MyClass){
sender.modalDialog.show(sender.bar);
}
}
bar() {
}
}
Krótko mówiąc, metoda foo powinna pokazać jakiś modalDialog, który z kolei powinien po wciśnięciu OK wywołać metodę bar.
I wszystko dzieje się, ale w metodzie bar this
wskazuje na guzik, a nie na obiekt klasy MyClass.
Wywołanie tej metody jest robione prosto:
export declare type EventHandler = () => void;
show(action: EventHandler){
//pokaż okienko, jeśli wciśnięto ok, to wtedy:
action();
}
Trochę to obszedłem na tyle, na ile znam javascript i wyszło mi ostatecznie coś takiego:
export class MyClass {
foo(){
this._ajaxManager.doSth(url,
function(sender: MyClass){
sender.modalDialog.show(sender, sender.bar);
}
}
bar(sender: MyClass) {
//tutaj używam sender zamiast this
}
}
I wywołanie show():
export declare type EventHandler = (sender: object) => void;
show(sender: object, action: EventHandler){
//pokaż okienko, jeśli wciśnięto ok, to wtedy:
action(sender);
}
I teraz rodzi się pytanie. Czy można to zrobić inaczej niż ja? I pytanie przy okazji jQuery, czy mając coś takiego:
let beforeShowFunc = this[funcName];
$(someObject)on("beforeShow", onBeforeShowFunc);
Mogę inaczej wywołać metodę onBeforeShowFunc, żebym miał this wskazujące na obiekt, którego się spodziewam, niż w taki sposób?
class MyClass
{
foo(funcName: string)
{
let beforeShowFunc = this[funcName];
$(someObject)on("beforeShow", this, onBeforeShowFunc);
}
beforeShow(e)
{
e.data // <-- to mi robi za "this"
}
}