2017-05-10 5 views
1

Ich bin mir nicht sicher, wie dieses Benutzerinteraktionsproblem, das ich habe, anzugehen. API ist 3DMolJS/TS muss bind verwenden, aber immer noch Original dieses

ich in

model.setClickable({chain: theChain, resi: mappedPosition}, true, function(){ 
    console.log(this); 
}); 

Vor allem für die ursprüngliche Implementierung wie oben this beiden this Elemente zuzugreifen versuchen auf einen Ort des Benutzer geklickt wäre. Allerdings muss ich auch die angeklickte Position mit einem Wert aus dem aufrufenden Objekt außerhalb kombinieren.

Ich versuchte .bind(null,this) noch innerhalb der Funktion this ist auf null festgelegt.

habe ich versucht, einen Verschluss

const clickClosure = function(){ 

    const mutations = self.alignment.mutations; 

    function clicker(){ 
     console.log(this); 
     console.log(mutations); 
    } 

    return clicker(); 
} 

model.setClickable({chain: theChain, resi: mappedPosition}, true,clickClosure); 

zu finden, dass Mutationen existiert, aber this wurde nicht definiert. Irgendeine Idee, wie man beide ohne globale Variablen erhält?

Antwort

1

Verwenden Sie eine Lambda-Funktion, um eine lexikalische this übergeben.

model.setClickable({chain: theChain, resi: mappedPosition}, true, (stuff) => { 
    console.log(this, stuff); // no `this` binding to the function 
}); 

Die this halten sollte an den Anrufer gebunden, und es ist wirklich der einzige Weg, dass der Bezug von einem Rückruf wie diese zu erhalten.

+1

Danke! Ich habe die Lambda-Notation komplett vergessen => Es funktioniert jetzt –

Verwandte Themen