【问题标题】:Will Dart support the use of existing JavaScript libraries?Dart 是否支持使用现有的 JavaScript 库?
【发布时间】:2011-12-04 16:27:08
【问题描述】:

我了解 Dart 编译为 JavaScript,我阅读了 Libraries 上的 Dart Language Spec,尽管我在那里没有看到答案。此外,在他们的discussion form 上搜索“现有”一词会发现 3 个不相关的结果。

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

【问题讨论】:

标签: javascript libraries dart


【解决方案1】:

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

【讨论】:

  • @Seth 我有一个后续问题。当 Dart 最终取代 Javascript 时,你使用 Dart 的 Javascript 库真的很有意义吗? Dart 是否有内置的可视化功能?
  • @AmitTomar 社区无法立即移植所有 JS 库,因此使用大量的 JS 库是有意义的。至于图表(可视化),我只知道与基于 JS 的库的互操作。
  • 谢谢Seth,我还在article 中演示了如何使用它。
【解决方案2】:

您将无法直接从 dart 代码调用 javascript。 native 指令是为 dartc 的核心库(dart:core、dart:dom、dart:html、dart:json 等)保留的,它们本身会编译为 javascript。

【讨论】:

  • 你有这个参考吗?
  • 我在 dartc 团队工作,在内部讨论将本地指令和关键字限制为 dart: 库。您当然可以查看任何核心函数(例如isolate.dart 和isolate.js),并看到将“native”关键字附加到函数签名(注意:Dart 版本中没有正文)将让您调用损坏的 javascript 函数;但我们不保证将来不会破坏您。
  • 我理解并尊重为 Web 提供一种干净且经过深思熟虑的语言的理想,但我请求您考虑使用互操作层。 Microsoft 提供了一个从 Com 到 .Net 的工具,以帮助确保项目可以增量迁移。这丝毫没有阻碍 .Net 的成功。我相信这有助于它的采用,尽管他们确实随着时间的推移对其进行了改进。如果破坏是一个严重问题,请考虑为主要库(如 jQuery、MooTools 和 script.aculo.us)提供邀请程序。谢谢。
  • 我邀请您通过我们的问题跟踪器 @link 提出功能请求。我不相信这个决定是一成不变的。
  • 只是指出这已再次作为问题提出:code.google.com/p/dart/issues/detail?id=1108
【解决方案3】:

现在有一种更简单的新方法https://pub.dartlang.org/packages/js(当前版本为 0.6.0-beta.6)

让 Dart 可以使用 JS 类和函数,例如:

@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 库。这里是an article 解释如何使用这个库与 JavaScript 进行互操作。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    相关资源
    最近更新 更多