Ich muss auf ein JavaScript-Objekt this
von einer Dart-Funktion zugreifen. Ich füge effektiv eine neue Methode zu einem JavaScript-Objekt, über Dart-JS-Interop. Ich muss auf Eigenschaften zugreifen, die sich auf dem JavaScript-Objekt von der Methode befinden, die in Dart definiert wird.Wie kann ich `this` von JavaScript über JS - Dart interop aufrufen?
6
A
Antwort
5
Der Callback
Konstruktor kann die this
von JavaScript übergeben. Nach dem API docs for Callback:
new Callback.many(Function f, {bool withThis: false})
new Callback.once(Function f, {bool withThis: false})
Hier ist ein Beispiel:
Dart-Code:
import 'dart:html';
import 'package:js/js.dart' as js;
void main() {
var greeter = js.context['greeter'];
var msg = greeter['greet']('Bob');
greeter['doCoolStuff'] = new js.Callback.many(doCoolStuff, withThis: true);
}
doCoolStuff(jsThis) {
print(jsThis['msg']);
}
Beachten Sie die Verwendung von withThis: true
wenn die Callback-Erstellung. Die this
von JavaScript wird als das erste Argument der Rückruffunktion übergeben. In diesem Fall gebe ich einen Namen jsThis
.
JavaScript-Code:
function Greeter() {
this.msg = 'hello';
var that = this;
document.getElementById('clickme').addEventListener('click', function() {
that.doCoolStuff();
});
}
Greeter.prototype.greet = function(name) {
return this.msg + ' ' + name;
}
var greeter = new Greeter();
document.getElementById('clickme').addEventListener('click', function() {
greeter.doCoolStuff(); // comes from Dart land
});