我如何与现有的JS对象互操作?

时间:2016-07-30 08:51:12

标签: dart dart-js-interop dart-dev-compiler

我正在尝试编写Dart代码,它将生成相当于此的粗略代码:

var disposable = vscode['commands'].registerCommand(
    'extension.sayHello',
    function () {
        vscode['window'].showInformationMessage('Hello World!');
    }
);
context.subscriptions.push(disposable);

变量vscodecontext都是JavaScript中的全局变量,它正在执行我的Dart(使用Dart Dev Compiler编译为JS)。

我很高兴context / vscode现在完全没有类型,但是我很难弯曲JS package来输出这样的代码(例如,如果我把@JS()放在存根上{ {1}},我得到vscode)。

2 个答案:

答案 0 :(得分:2)

您可以使用基础dart:js features

请注意,context恰好是javascript背景的dart名称。

var disposable = context['vscode']['commands'].callMethod('registerCommand', [
    'extension.sayHello',
    () {
        context['vscode']['window'].callMethod('showInformationMessage', ['Hello World!']);
    }]);
);
context['context']['subscriptions'].callMethod('push', [disposable]);

答案 1 :(得分:1)

让我在github上用package:js汇总一个快速示例。

修改:好的,你走了: https://github.com/matanlurey/js-interop-examples

我花了几次尝试这个包:js语法正确(我们可能需要更多的文档和示例),但我最终创建了一个“假的”可视化工作室代码API(vscode.js),并用它进行干预细

如果您希望自己的示例在Dartium中运行,请注意您需要使用allowInterop包装函数。