Dart จะรองรับการใช้ไลบรารี JavaScript ที่มีอยู่หรือไม่


108

ฉันเข้าใจ Dart รวบรวมเป็น JavaScript และฉันอ่านDart Language Specบน Libraries แม้ว่าฉันจะไม่เห็นคำตอบที่นั่น นอกจากนี้การค้นหาในแบบฟอร์มการสนทนาสำหรับคำว่า 'ที่มีอยู่' จะพบผลลัพธ์ 3 รายการที่ไม่เกี่ยวข้องกัน

ไม่มีใครทราบว่า Dart จะรองรับการใช้ไลบรารี JavaScript ที่มีอยู่เช่น jQuery หรือ Raphael หรือไม่?


1
แม้ว่าฉันจะโพสต์คำถามตอนนี้
TMB

คำตอบ:


96

คำตอบคือตอนนี้ใช่! ตอนนี้ Dart จัดส่งไลบรารี JS-interop เพื่อใช้โค้ด JavaScript ที่มีอยู่กับแอป Dart ของคุณ เรียนรู้เพิ่มเติมที่นี่: https://www.dartlang.org/articles/js-dart-interop/


ขอบคุณสำหรับคำชี้แจง Seth!
jtmcdole

@Seth ฉันมีคำถามติดตาม คุณใช้ไลบรารี Javascript จาก Dart หรือไม่เมื่อ Dart อยู่ที่นั่นเพื่อแทนที่ Javascript ในที่สุด? และ Dart มีสิ่งที่สร้างขึ้นเพื่อการแสดงภาพหรือไม่?
Amit Tomar

2
@AmitTomar ชุมชนไม่สามารถพอร์ตผ่านไลบรารี JS ทั้งหมดได้ในทันทีดังนั้นจึงเหมาะสมที่จะใช้ไลบรารี JS จำนวนมากที่นั่น สำหรับการสร้างแผนภูมิ (การแสดงภาพ) ฉันทราบเฉพาะการทำงานร่วมกันกับไลบรารีที่ใช้ JS เท่านั้น
Seth Ladd

@SethLadd ขอบคุณ Seth ที่เป็นประโยชน์
Amit Tomar

ขอบคุณ Seth ฉันสาธิตวิธีใช้ในบทความนี้ด้วย
graphicbeacon

15

คุณจะไม่สามารถเรียกใช้จาวาสคริปต์ได้โดยตรงจากรหัสโผ คำสั่งเนทีฟสงวนไว้สำหรับไลบรารีหลักของ dartc (dart: core, dart: dom, dart: html, dart: json, etc) ซึ่งคอมไพล์เองกับจาวาสคริปต์


คุณมีข้อมูลอ้างอิงสำหรับสิ่งนี้หรือไม่?
TMB

6
ฉันทำงานในทีม dartc และภายในมีการพูดถึงการ จำกัด คำสั่งเนทีฟ & คีย์เวิร์ดไว้ที่ dart: libraries เท่านั้น คุณสามารถดูฟังก์ชันหลัก ๆ ได้อย่างแน่นอน (เช่น isolate.dart & isolate.js) และดูว่าการต่อท้ายคีย์เวิร์ด "เนทีฟ" กับลายเซ็นฟังก์ชัน (หมายเหตุ: ไม่มีเนื้อความในเวอร์ชัน Dart) จะช่วยให้คุณเรียกใช้ฟังก์ชันจาวาสคริปต์ที่สับสน แต่เราไม่สัญญาว่าเราจะไม่ทำลายคุณในอนาคต
jtmcdole

6
ฉันเข้าใจและเคารพในอุดมคติของการทำให้เว็บเป็นภาษาที่สะอาดและมีความคิด แต่ฉันขอให้คุณพิจารณาเลเยอร์การทำงานร่วมกัน Microsoft จัดหาหนึ่งรายการจาก Com ไปยัง. Net เพื่อช่วยให้แน่ใจว่าสามารถย้ายโครงการได้ทีละน้อย สิ่งนี้ไม่ได้ขัดขวางความสำเร็จของ. Net เลย ฉันเชื่อว่ามันช่วยให้มีการนำไปใช้แม้ว่าพวกเขาจะปรับปรุงให้ดีขึ้นตามกาลเวลา หากการทำลายเป็นสิ่งที่น่ากังวลอย่างยิ่งให้พิจารณาโปรแกรมเชิญสำหรับไลบรารีหลัก ๆ เช่น jQuery, MooTools และ script.aculo.us ขอบคุณ.
TMB

2
ผมขอเชิญคุณที่จะทำให้คำขอคุณสมบัติผ่านการติดตามปัญหาของเรา @ ลิงค์ ฉันไม่เชื่อว่าการตัดสินใจนี้ได้ถูกโยนทิ้งไปแล้ว
jtmcdole

1
เพียงแค่ชี้ให้เห็นว่าปัญหานี้ถูกนำมาเป็นปัญหาอีกครั้ง: code.google.com/p/dart/issues/detail?id=1108
jtmcdole

8

ตอนนี้มีวิธีใหม่ที่ง่ายกว่าhttps://pub.dartlang.org/packages/js (ปัจจุบันเป็นเวอร์ชัน 0.6.0-beta.6)

ทำให้คลาสและฟังก์ชัน JS พร้อมใช้งานสำหรับ Dart เช่น:

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

สำหรับข้อมูลเพิ่มเติมโปรดดู readme ของแพ็คเกจ


4

ดูหัวข้อนี้จากฟอรั่มการอภิปราย: โทรรหัสจาวาสคริปต์เก่า


1
พวกเขาอ้างอิงถึงคีย์เวิร์ดเนทีฟ แต่ฉันไม่พบสิ่งนั้นใน Library Reference หรือ Language Spec
TMB

4

นอกจากนี้ยังมีdart:jsห้องสมุด และนี่คือบทความอธิบายวิธีใช้ไลบรารีนี้เพื่อทำงานร่วมกับ JavaScript


1
โปรดทราบว่าลิงก์ไม่ถูกต้อง Dart / JS ซึ่งเป็นส่วนหนึ่งของไลบรารีโผหลักนั้นง่ายกว่าและสะอาดกว่ามากในการใช้อินเทอร์เฟซกับจาวาสคริปต์ ฉันไม่เห็นอะไรที่เป็นทางการในหัวข้อนี้ แต่เป็นส่วนหนึ่งของ SDK: api.dartlang.org/stable/1.17.1/dart-js/dart-js-library.html
BeatingToADifferentRobot
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.