Как мне получить доступ к `this` из JavaScript через взаимодействие JS - Dart?

Мне нужно получить доступ к this объекта JavaScript из функции Dart. Я эффективно добавляю новый метод к объекту JavaScript через взаимодействие Dart-JS. Мне нужно получить доступ к свойствам объекта JavaScript из метода, определенного в Dart.


person Seth Ladd    schedule 17.07.2013    source источник


Ответы (1)


Конструктор Callback может передавать this из JavaScript. Согласно документации API для обратного вызова:

new Callback.many(Function f, {bool withThis: false})
new Callback.once(Function f, {bool withThis: false})

Вот пример:

Код дротика:

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']);
}

Обратите внимание на использование withThis: true при создании обратного вызова. this из JavaScript передается в качестве первого аргумента функции обратного вызова. В данном случае я даю ему имя jsThis.

Код JavaScript:

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
});
person Seth Ladd    schedule 17.07.2013