Dart có hỗ trợ việc sử dụng các thư viện JavaScript hiện có không?


108

Tôi hiểu Dart biên dịch sang JavaScript và tôi đã đọc Thông số ngôn ngữ của Dart trên Thư viện, mặc dù tôi không thấy câu trả lời ở đó. Ngoài ra, một tìm kiếm trên biểu mẫu thảo luận của họ cho từ 'hiện tại' sẽ cho ra 3 kết quả không liên quan.

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


1
mặc dù bây giờ tôi đang đăng câu hỏi .
TMB

Câu trả lời:


96

Câu trả lời bây giờ là Có! Dart hiện cung cấp thư viện JS-interop để sử dụng mã JavaScript hiện có 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/


Cảm ơn vì đã làm rõ, Seth!
jtmcdole 27/10/12

@Seth Tôi có một câu hỏi tiếp theo. Việc sử dụng thư viện Javascript từ Dart có thực sự có ý nghĩa không, khi Dart có mặt để thay thế Javascript? Và liệu Dart có sẵn thứ gì đó để hình dung không?
Amit Tomar,

2
@AmitTomar cộng đồng không thể chuyển qua tất cả các thư viện JS ngay lập tức, vì vậy bạn nên sử dụng số lượng lớn các thư viện JS ngoài đó. Đối với biểu đồ (trực quan hóa), tôi chỉ biết về tương tác với các thư viện dựa trên JS.
Seth Ladd,

@SethLadd Cảm ơn Seth, điều đó thật hữu ích.
Amit Tomar

Cảm ơn Seth, tôi cũng trình bày cách sử dụng nó trong bài viết này .
graphicbeacon 19/02/19

15

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


bạn có một tài liệu tham khảo cho điều này?
TMB

6
Tôi làm việc trong nhóm dartc và nội bộ có những cuộc thảo luận về việc hạn chế chỉ thị & từ khóa gốc đối với dart: thư viện. Bạn chắc chắn có thể xem xét bất kỳ hàm cốt lõi nào (ví dụ: isolate.dart & isolate.js) và thấy rằng việc thêm từ khóa "gốc" vào một chữ ký hàm (lưu ý: không có nội dung trong phiên bản Dart) sẽ cho phép bạn gọi một hàm javascript bị xáo trộn; 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 cung cấp cho Web một ngôn ngữ sạch sẽ và rõ ràng, nhưng tôi đề nghị bạn xem xét một lớp tương tác. Microsoft đã cung cấp một từ Com sang .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 hề cản trở sự thành công của .Net; Tôi tin rằng nó đã giúp được việc áp dụng, mặc dù họ đã cải thiện nó theo thời gian. Nếu vi phạm là điều gì đó đáng lo ngại, hãy xem xét một chương trình gọi là cho các thư viện lớn như jQuery, MooTools và script.aculo.us. Cảm ơn bạn.
TMB

2
Tôi mời bạn yêu cầu tính năng thông qua liên kết @ theo dõi vấn đề của chúng tôi . Tôi không tin rằng quyết định này đã được đúc thành đá.
jtmcdole 13/10/11

1
Chỉ chỉ ra rằng điều này đã được đưa ra như một sự cố một lần nữa: code.google.com/p/dart/issues/detail?id=1108
jtmcdole

8

Bây giờ có một cách mới đơn giản hơn https://pub.dartlang.org/packages/js (hiện tại là phiên bản 0.6.0-beta.6)

Cung cấp các lớp và chức năng JS 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);
}

để biết thêm, hãy xem readme của gói


4

Xem chủ đề này từ diễn đàn thảo luận: Gọi mã javascript cũ .


1
họ 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 Thông số ngôn ngữ.
TMB

4

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


1
Lưu ý 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ễ sử dụng hơn nhiều để giao tiếp với javascript. Tôi không nhìn thấy bất cứ điều gì chính thức về chủ đề này, nhưng nó là một phần của SDK: api.dartlang.org/stable/1.17.1/dart-js/dart-js-library.html
BeatingToADifferentRobot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.