2013-07-17 10 views
6

ダーツ関数からJavaScriptオブジェクトのthisにアクセスする必要があります。 JavaScriptオブジェクトにDart-JS interopを使用して新しいメソッドを効果的に追加しています。私は、Dartで定義されたメソッドからJavaScriptオブジェクトのプロパティにアクセスする必要があります。JS - Dart interop経由でJavaScriptから `this`にアクセスするにはどうすればいいですか?

答えて

5

Callbackコンストラクタは、JavaScriptからthisを渡すことができます。 API docs for Callbackによる:ここ

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の使用コールバックを作成します。 JavaScriptのthisは、コールバック関数の最初の引数として渡されます。この場合、私は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 
}); 
関連する問題