Dart是否支持使用现有的JavaScript库?


108

我了解Dart可以使用JavaScript进行编译,并且阅读了有关库的Dart语言规范,尽管那里没有找到答案。同样,在他们的讨论表中搜索“ existing”一词,会发现3个不相关的结果。

有谁知道Dart是否将支持使用现有的JavaScript库(例如jQuery或Raphael)?


1
尽管我现在发布问题
TMB

Answers:


96

答案是肯定的!Dart现在提供了一个JS-interop库,可在Dart应用程序中使用现有的JavaScript代码。在此处了解更多信息:https : //www.dartlang.org/articles/js-dart-interop/


谢谢您的澄清,塞思!
2012年

@Seth我有一个后续问题。当Dart在那里最终可以替代Javascript时,使用Dart中的Javascript库真的有意义吗?Dart是否具有用于可视化的内置功能?
阿米特·托玛

2
@AmitTomar社区无法立即移植所有JS库,因此使用大量的JS库是有意义的。至于图表(可视化),我只知道与基于JS的库互操作。
塞思·拉德

@SethLadd谢谢塞思,这很有帮助。
阿米特·托玛

感谢Seth,我还将在本文中演示如何使用它。
graphicbeacon

15

您将无法直接从Dart代码中调用javascript。native指令保留给dartc的核心库(dart:core,dart:dom,dart:html,dart:json等),该库本身可以编译为javascript。


您对此有参考吗?
TMB

6
我在dartc团队工作,在内部,有关于将本地指令和关键字限制为dart的讨论:仅限库。您当然可以查看任何核心功能(例如isolate.dart和isolate.js),并看到在功能签名后加上“ native”关键字(请注意:Dart版本中没有正文)将使您可以调用错误的javascript函数;但我们不保证以后不会打扰您。
jtmcdole 2011年

6
我理解并尊重为Web提供一种干净且经过深思熟虑的语言的理想选择,但是我请您考虑一个互操作层。Microsoft提供了一个从Com到.Net的程序,以帮助确保可以逐步迁移项目。这一点丝毫不妨碍.Net的成功。我相信它有助于其采用,尽管他们确实随着时间的推移而不断改进。如果破坏是一个值得严重关注的问题,请考虑使用针对主要库(如jQuery,MooTools和script.aculo.us)的邀请程序。谢谢。
TMB

2
我邀请您通过我们的问题跟踪器@ 链接提出功能请求。我认为这个决定还没有定下来。
jtmcdole,2011年

1
只是指出,这再次成为一个问题:code.google.com/p/dart/issues/detail?
id=1108

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

有关更多信息,请参见包装的自述文件



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.