Ich habe diese Button-Klasse in Typoskript gemacht. Ich habe es eine "Standard" -Funktion gegeben, um Klickereignisse zu behandeln. Was aber, wenn ich stattdessen eine Funktion als Argument übergeben und stattdessen die übergebene auf Klick aufrufen möchte?Standardfunktion in Typoskript-Klasse überschreiben
Hier ist der Code:
abstract class BaseButton {
element:HTMLElement;
label:string;
constructor(element:HTMLElement, label:string) {
console.log(this);
this.element = element;
this.label = label;
this.init();
}
init():void {
this.setText(this.label);
this.addListeners();
}
setText(label:string):void {
this.element.innerHTML = label;
}
kill():void {
this.removeListeners();
}
addListeners():void {
this.element.addEventListener("mouseover", this.onMouseOver);
this.element.addEventListener("click", this.onClick);
this.element.addEventListener("mouseout", this.onMouseOut);
this.element.addEventListener('touchstart', this.onTouchStart);
this.element.addEventListener('touchmove', this.onTouchMove);
this.element.addEventListener('touchcancel', this.onTouchCancel);
this.element.addEventListener('touchend', this.onTouchEnd);
}
removeListeners():void {
this.element.removeEventListener("mouseover", this.onMouseOver);
this.element.removeEventListener("click", this.onClick);
this.element.removeEventListener("mouseout", this.onMouseOut);
this.element.removeEventListener('touchstart', this.onTouchStart);
this.element.removeEventListener('touchmove', this.onTouchMove);
this.element.removeEventListener('touchcancel', this.onTouchCancel);
this.element.removeEventListener('touchend', this.onTouchEnd);
}
onTouchStart():void {
}
onTouchMove():void {
}
onTouchCancel():void {
}
onTouchEnd():void {
}
onMouseOver():void {
console.log('mouse over');
}
onMouseOut():void {
console.log('mouse out');
}
abstract onClick(event:Event):void
}
class Button extends BaseButton {
element:HTMLElement;
label:string;
callback:any;
constructor(element:HTMLElement, label:string, callback?:() => void) {
super(element,label);
this.element = element;
this.label = label;
this.callback = callback;
}
onClick(event:Event):void {
if (this.callback) {
console.log('ddd');
this.callback();
}
}
}
const el = document.getElementById('btn');
const button = new Button(el,'Click');
const ell = document.getElementById('btnn');
const buttonn = new Button(ell,'Click');
const elll = document.getElementById('btnnn');
const buttonnn = new Button(elll,'Click',() => {
alert('fff');
});
Hallo, danke! Vielleicht war ich nicht klar genug. Was ich tun möchte, ist über den Klick in der Schaltfläche zu überschreiben, wenn ein Click-Handler als Argument übergeben wird. – user2952238
Ich glaube, dass mein Code das tut, was Sie fragen. Lassen Sie mich wissen, wenn Sie Änderungen benötigen. –
Es gibt mir den folgenden Fehler: TypeError: this. clickHandler ist keine Funktion. – user2952238