2013-07-17 2 views
6

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

ответ

5

Конструктор Callback может передать this с JavaScript. Согласно API docs for Callback:

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

Вот пример:

Dart код:

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 при создании Обратного. В качестве первого аргумента функции обратного вызова передается код . В этом случае я даю ему имя 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 
});