2011-10-10 43 views
93

Tôi hiểu Dart biên dịch thành JavaScript và tôi đọc Dart Language Spec trên Thư viện, mặc dù tôi không thấy câu trả lời ở đó. Ngoài ra, tìm kiếm trên discussion form cho từ 'hiện tại' sẽ trả về 3 kết quả không liên quan.Dart có hỗ trợ việc sử dụng các thư viện JavaScript hiện có không?

Có ai biết liệu Dart có hỗ trợ sử dụng các thư viện JavaScript hiện có như jQuery hay Raphael không?

+1

mặc dù tôi đang đăng câu hỏi [https://groups.google.com/a/dartlang.org/group/misc/browse_thread/thr ead/511a97cd362b4f08 #) ngay bây giờ. – TMB

Trả lời

84

Câu trả lời giờ là Có! Dart giờ đây vận chuyển thư viện JS-interop để sử dụng mã JavaScript hiện tại với ứng dụng Dart của bạn. Tìm hiểu thêm tại đây: https://www.dartlang.org/articles/js-dart-interop/

+0

Cảm ơn bạn đã làm rõ, Seth! – jtmcdole

+0

@Seth Tôi đã có một câu hỏi tiếp theo. Liệu nó thực sự có ý nghĩa nhiều với bạn sử dụng thư viện Javascript từ Dart, khi Dart là có để cuối cùng kinda thay thế Javascript? Và Dart có một cái gì đó sẵn có cho hình dung? –

+2

@AmitTomar cộng đồng không thể cổng trên tất cả các thư viện JS ngay lập tức, do đó, việc sử dụng số lượng lớn các thư viện JS ở đó là rất hợp lý. Đối với biểu đồ (visualization), tôi chỉ biết về interop với các thư viện dựa trên JS. –

3

Xem chủ đề này từ diễn đàn thảo luận: Calling old javascript code.

+1

chúng tham chiếu đến từ khóa gốc, nhưng tôi không thể tìm thấy từ khóa đó trong Tham chiếu thư viện hoặc Đặc tả ngôn ngữ. – TMB

14

Bạn sẽ không thể gọi javascript trực tiếp từ mã phi tiêu. Các chỉ thị bản địa được dành riêng cho các thư viện lõi của dartc (phi tiêu: lõi, phi tiêu: dom, phi tiêu: html, phi tiêu: json, vv), mà chính nó biên dịch để javascript.

+0

bạn có tham khảo về điều này không? – TMB

+6

Tôi làm việc trong nhóm dartc và nội bộ có các cuộc đàm phán về việc hạn chế chỉ thị và từ khóa gốc thành phi tiêu: chỉ các thư viện. Bạn chắc chắn có thể xem xét bất kỳ chức năng cốt lõi nào (ví dụ: isolate.dart & isolate.js) và xem thêm từ khóa "gốc" vào chữ ký hàm (lưu ý: không có phần thân nào trong phiên bản Dart) sẽ cho phép bạn gọi hàm javascript bị xé; nhưng chúng tôi không hứa rằng chúng tôi sẽ không phá vỡ bạn trong tương lai. – jtmcdole

+6

Tôi hiểu và tôn trọng lý tưởng cho Web một ngôn ngữ sạch sẽ và được suy nghĩ, nhưng tôi cầu xin bạn xem xét một lớp interop. Microsoft cung cấp một từ Com tới .Net để giúp đảm bảo rằng các dự án có thể được di chuyển từng bước. Điều này đã không cản trở sự thành công của Net. Tôi tin rằng nó đã giúp thông qua, mặc dù họ đã cải thiện nó theo thời gian. Nếu vi phạm là một vấn đề nghiêm trọng, hãy xem xét một chương trình invitational cho các thư viện lớn như jQuery, MooTools và script.aculo.us. Cảm ơn bạn. – TMB

2

Ngoài ra còn có thư viện dart:js. Và đây là an article giải thích cách sử dụng thư viện này để tương tác với JavaScript.

+0

Lưu ý rằng liên kết không chính xác. Dart/JS là một phần của thư viện phi tiêu chính dễ dàng hơn và sạch hơn để sử dụng để giao tiếp với javascript. Tôi không thấy bất kỳ điều gì chính thức về chủ đề này, nhưng nó là một phần của SDK: https://api.dartlang.org/stable/1.17.1/dart-js/dart-js-library.html – BeatingToADifferentRobot

6

Hiện nay, một cách đơn giản hơn mới https://pub.dartlang.org/packages/js (hiện tại phiên bản 0.6.0-beta.6)

Make lớp học và chức năng JS sẵn cho Dart như:

@JS("JSON.stringify") 
external String stringify(obj); 
@JS('google.maps') 
library maps; 

// Invokes the JavaScript getter `google.maps.map`. 
external Map get map; 

// `new Map` invokes JavaScript `new google.maps.Map(location)` 
@JS() 
class Map { 
    external Map(Location location); 
    external Location getLocation(); 
} 

// `new Location(...)` invokes JavaScript `new google.maps.LatLng(...)` 
// 
// We recommend against using custom JavaScript names whenever 
// possible. It is easier for users if the JavaScript names and Dart names 
// are consistent. 
@JS("LatLng") 
class Location { 
    external Location(num lat, num lng); 
} 

cho xem thêm readme của gói

Các vấn đề liên quan