2013-07-17 28 views

Trả lời

5

Nhà xây dựng Callback có thể vượt qua this từ JavaScript. Theo API docs for Callback:

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

Dưới đây là một ví dụ:

đang

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

Thông báo việc sử dụng các withThis: true khi tạo Callback. Các this từ JavaScript được truyền vào như là đối số đầu tiên cho hàm gọi lại. Trong trường hợp này, tôi đặt tên cho nó là jsThis.

Mã 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 
}); 
Các vấn đề liên quan