【问题标题】:How can I interop with existing JS objects?如何与现有的 JS 对象进行互操作?
【发布时间】:2016-12-04 22:55:13
【问题描述】:

我正在尝试编写 Dart 代码,该代码将生成与此大致等效的代码:

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

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

我很高兴 context/vscode 现在完全没有类型,但我正在努力弯曲 JS package 以输出这样的代码(例如,如果我将 @JS() 放在存根上 vscode ,我得到dart.global.vscode)。

【问题讨论】:

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


    【解决方案1】:

    您可以使用基础dart:js features

    请注意,context 恰好是 dart 用于 javascript 上下文的名称。

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

    【讨论】:

      【解决方案2】:

      让我在 github 上用package:js 整理一个简单的例子。

      编辑:好的,给你: https://github.com/matanlurey/js-interop-examples

      我尝试了几次 package:js 语法正确(我们可能需要更多文档和示例),但我最终创建了一个“假”的 Visual Studio 代码 API (vscode.js),并与之交互很好。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多