从javascript调用Dart代码

时间:2014-04-16 08:51:52

标签: dart

我的公司有一个用Javascript编写的非常胖的胖客户端应用程序。与通常的大型JavaScript应用程序一样,代码正在迅速变得难以管理。

我个人认为用Dart写作会是一个更好的解决方案。但是,再次开始'管理方法不起作用。

我知道可以从Dart调用javascript代码,但是可以从Javascript调用Dart代码吗?

这将允许我们逐步用Dart版本替换更重要的库,并且仍然可以使用原始代码库。

由于 理查德

3 个答案:

答案 0 :(得分:12)

你应该试试Dart的JS interop library

您可以在Dart中定义回调函数,并将其(以某种方式)导出到JavaScript。

看一下这个例子:

Dart代码定义了JS函数

 context['javascriptFunctionName'] = (parameter) {
       //call any Dart method
    }

然后从JavaScript调用它:

javascriptFunctionName({'param': 'value'});

答案 1 :(得分:1)

使用包js而不是dart:js,可以通过这种方式将其提供给JS:

import 'dart:html';
import 'package:js/js_util.dart';

void main() {
  setProperty(window, 'callDartFunc', allowInterop(dartFunc));
}

String dartFunc() => 'Hello World';

感谢Matan Lurey https://gitter.im/dart-lang/TALK-general?at=585b9b42db9cafe9183a3345

答案 2 :(得分:-5)

只要在html文件中包含强制性的飞镖线:

<script type="application/dart" src="fileName.dart"></script>
<script src="packages/browser/dart.js"></script>

你应该能够添加飞镖替换代码并进行编译。这样您就可以开始逐位转换。据我所知,虽然没有办法从JavaScript调用dart代码。


现在我有更多的时间,让我解释一下。由于Dart是一种相对较新的语言,并且它没有为JavaScript语言添加任何内容,因此Oracle没有很多动机来增加与Dart的交叉兼容性。虽然这两种语言可能没有那么多交叉兼容,但它们可以共存并且具有更多的单向关系。

只要您直接从您的html文件或其他飞镖功能调用您的飞镖代码,您至少可以启动将dart集成到您的网站的过程。然后在时间允许的情况下,如果这是您决定采用的方向,您应该能够开始更新JavaScript的长时间过程。