Dart会支持使用现有的JavaScript库吗?

112
我了解Dart可以编译成JavaScript,并且阅读了关于库的Dart语言规范,但我在那里没有找到答案。此外,在他们的讨论论坛中搜索单词“existing”,会出现3个不相关的结果。请问有人知道Dart是否支持使用现有的JavaScript库,例如jQuery或Raphael吗?

1
尽管我现在发布了这个问题 - TMB
4个回答

96

@Seth 我有一个后续问题。当 Dart 存在来最终替代 Javascript 时,你真的觉得从 Dart 使用 Javascript 库有多大意义吗?Dart 是否内置了可视化功能? - Amit Tomar
2
@AmitTomar 社区无法立即移植所有 JS 库,因此使用大量现有的 JS 库是有意义的。至于图表(可视化),我只知道与基于 JS 的库进行互操作。 - Seth Ladd
谢谢Seth,我也在这篇文章中演示了如何在你的Dart应用程序中使用它。 - graphicbeacon

15

您将无法直接从Dart代码中调用JavaScript。Native指令是为dartc的核心库(dart:core、dart:dom、dart:html、dart:json等)保留的,这些库本身会编译成JavaScript。


6
我在Dartc团队工作,内部有关于将本地指令和关键字限制为仅适用于dart:库的讨论。您可以查看任何核心功能(例如isolate.dart和isolate.js),并查看将“native”关键字附加到函数签名(注意:在Dart版本中没有主体)将允许您调用混淆的javascript函数;但我们不能保证未来不会破坏您的代码。 - jtmcdole
7
我理解并尊重为Web提供一个干净和经过深思熟虑的语言的理念,但我请求您考虑添加一个互操作层。微软提供了一个从Com到.Net的层,帮助确保项目可以逐步迁移。这并没有妨碍.Net的成功;我认为它有助于其被采纳,尽管它们后来进行了改进。如果破坏是一个严重问题,请考虑为主要库(如jQuery、MooTools和script.aculo.us)提供邀请计划。谢谢。 - TMB
2
我邀请您通过我们的问题跟踪器@ link提出特性请求。 我不认为这个决定已经铸成定局。 - jtmcdole
1
只是指出这个问题再次被提出:http://code.google.com/p/dart/issues/detail?id=1108 - jtmcdole
@TMB 这个答案已经被 Seth 的答案所取代。请考虑更改接受的答案。 - antony.trupe
显示剩余2条评论

9

现在有一个更简单的方法 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);
}

更多信息请参阅该软件包的自述文件


4

还有一个dart:js库。这里有一篇文章,解释了如何使用此库与JavaScript进行交互。


1
请注意,链接不准确。Dart/JS是Dart主要库的一部分,更容易、更清晰地与JavaScript进行接口交互。我没有看到任何官方关于这个主题的内容,但它是SDK的一部分:https://api.dartlang.org/stable/1.17.1/dart-js/dart-js-library.html - BeatingToADifferentRobot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接