2013-07-17 16 views

cevap

5

Callback yapıcısı, this'u JavaScript'ten geçirebilir. API docs for Callback göre:

dart kod:

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

Bildirim withThis: true kullanımı Geri arama oluşturma

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

Burada bir örnektir. JavaScript'ten gelen this, geri arama işlevinin ilk argümanı olarak geçmiştir. Bu durumda, ona jsThis adını verdim.

JavaScript kodu:

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