标签: dart-js-interop

使用dart创建一个javascript库

问题

我目前正在开发一个JavaScript库,为了减少错误的数量,我认为我的库可能会受益于使用Dart的静态类型机制.首先,因为我的lib没有与HTML或其他JavaScript库进行任何互操作,只有纯javascript对象操作的东西.但是我没有在网上找到任何关于如何使用dart构建JS库的信息.所以我自己尝试这样做,创建了初始的dart文件:

library Repo;

class Type {
  final String name;
  final TypeCategory category;

  Type(String name, TypeCategory category) : name = name, category = category {
    category.types[name] = this;
  }
}

class TypeCategory {
  final String name;
  final Map<String, Type> types = new Map();

  TypeCategory(this.name);
}

class Branch {

}

class Descriptor {

}

class TableDescriptor extends Descriptor {
  TableDescriptor.ctor() {

  }
}

class Repo {
  Descriptor descriptor(String name) {

  }

  Branch branch(String name) {

  }

  void Merge() {

  }
} …
Run Code Online (Sandbox Code Playgroud)

dart dart-js-interop

5
推荐指数
1
解决办法
860
查看次数

在Dart中自动化JavaScript Interop

当我的飞镖项目中使用第三方JavaScript库,我手动经过库的文档,并通过其属性和方法遍历一系列繁琐打造达特代码contextcallMethod电话. 有没有人想出一种自动化方法?

我试图找到一个内省JavaScript库的命令行界面,以便我可以自动生成Dart源代码.我的搜索一直没有成功.

auto-generate dart dart-js-interop

5
推荐指数
1
解决办法
199
查看次数

在Dart JS interop中提到"this"

我想在Dart中实现以下代码:

var HelloWorldScene = cc.Scene.extend({
    onEnter:function () {
        this._super();
    }
});
Run Code Online (Sandbox Code Playgroud)

我的Dart实现如下所示:

class HelloWorldScene {
  HelloWorldScene() {
    var sceneCollectionJS = new JsObject.jsify({ "onEnter": _onEnter});

    context["HelloWorldScene"] = context["cc"]["Scene"].callMethod("extend", [sceneCollectionJS]);
  }

  void _onEnter() {
    context["this"].callMethod("_super");
  }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,运行代码时出现以下错误:

null对象没有方法'callMethod'

在以下行:

context ["this"].callMethod("_ super",[]);

context ["this"]似乎是null,所以我的问题是:如何从Dart引用"this"变量?

更新1:完整的示例代码可以在github上找到:https: //github.com/uldall/DartCocos2dTest

javascript dart dart-js-interop

5
推荐指数
1
解决办法
95
查看次数

如何使用 dart:js 将选项传递给 javascript 函数?

我有以下功能性 JavaScript 代码来演示我想要实现的目标。它应该输出传递给方法的对象,然后输出属性“a”的值。

<!DOCTYPE html>
<html>
<head>
</head>
<body>
  <script>
    window.theObjectCall = function(x) {
      console.log(x);
      console.log(x.a);
    }
  </script>
  <script src="main.dart.js" type="application/javascript"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我有以下 dart 代码,它可以工作,但是“a”无法按我的预期访问。

@JS('window')
library whatever;

import 'dart:js';

import 'package:js/js.dart';

@JS('theObjectCall') // Accessing method getCurrentPosition from Geolocation API
external void theJsObjectCall(JsObject theObject);

void someJsCallWithObject() {
  var object = JsObject(context['Object']);
  object['a'] = 'xxx';
  theJsObjectCall(object);
}

Run Code Online (Sandbox Code Playgroud)

在控制台中执行以下日志“未定义”。

在此输入图像描述

dart dart-js-interop flutter flutter-web

5
推荐指数
1
解决办法
2293
查看次数

如何从Dart中的Callback中获取"this":js

我试图将highcharts集成为AngularDart组件.Js interop就像一个魅力,但我遇到了一个我无法克服的问题.

Highcharts允许用户提供回调以自定义某些行为.例如,一个回调来格式化图表的工具提示.这是用javascript编写的格式化程序的一个例子:

formatter: function() {
            return 'The value for <b>'+ this.x +
                '</b> is <b>'+ this.y +'</b>';
        }
Run Code Online (Sandbox Code Playgroud)

我在Dart中有格式化程序功能.该函数被正确调用,但我不知道如何获得"this"对象来检索我需要的数据.

有谁能够帮我?

dart dart-js-interop

4
推荐指数
1
解决办法
222
查看次数

从 Dart 中的 JavaScript 对象获取任意属性

编辑:这是一个说明我的问题的最小项目。您可以通过将其提供给浏览器来查看所描述的错误:pub get然后是pub serve(dartium) 或pub build --mode=debug(其他浏览器)。

如何通过 JsObjectImpl 从 Dart 访问任意 JavaScript 属性?我正在使用 ace.js 库和 Dart 的互操作,我从打字稿接口改编而来,我调用的方法返回一个带有键值对的普通 javascript 对象。

Dart 给了我一个 JsObjectImpl,它不能转换为 Map 或 JsObject,两者都有 [] 访问器。它令人困惑地似乎是从不推荐使用的 JSObject 继承的(注意“s”在后者中大写),它没有 [] 访问器,因此我无法获取数据。

一些错误信息:

  1. 当试图从JsObjectImpl到JsObject铸造:
    ORIGINAL EXCEPTION: type 'JSObjectImpl' is not a subtype of type 'JsObject' of 'obj' where JSObjectImpl is from dart:js JsObject is from dart:js。使用时我也收到类似的消息Map

  2. 纵观调试器中的对象,我可以令人沮丧的看到JS观点,但物业没有在飞镖对象:
    Chrome 调试器显示带有键“4”的属性
    4: Object是我想要的数据。

javascript dart dart-js-interop

4
推荐指数
1
解决办法
1757
查看次数

将 javascript 转换为 dart

我读 To leverage one of the many existing libraries written in JavaScript, use package:js. If a TypeScript type definition file exists for a JavaScript library (see DefinitelyTyped for more info), you can use the js_facade_gen tool to generate Dart code for that library.https://webdev.dartlang.org/guides/web-programming

我很好奇如何在示例https://github.com/google/chartjs.dart中将javascript 库转换为dart 文件。我猜有两个步骤:1、从javascript库中生成(ts文件);2、使用js_facade_gen将ts文件转为dart。TypeScript type definition file

我希望得到更多细节。但缺少文件。欢迎任何提示。谢谢

javascript dart dart-js-interop chart.js

4
推荐指数
1
解决办法
5338
查看次数

使用 Dart JS 与 ES6 类的互操作

Java脚本:

class MyClass {

    constructor() {
        console.log("MyClass instance created");
        this.answer = 42;
    }
}

let example = new MyClass();
console.log(example.answer);
Run Code Online (Sandbox Code Playgroud)

镖:

@JS()
library interop_test;

import 'package:js/js.dart';

@JS()
class MyClass {
  external int get answer;
  external set answer(int value);
}
Run Code Online (Sandbox Code Playgroud)

创建互操作类的实例MyClass

MyClass myClass = MyClass();
Run Code Online (Sandbox Code Playgroud)

结果是:

异常:类型错误:dart.global.MyClass 不是构造函数

我还尝试将 和 添加external MyClass();external factory MyClass();@JS()注释的类中,但收到了相同的消息。如果我@anonymous向互操作类添加注释,异常就会消失,但我无法访问实例成员。(但我不明白为什么这需要匿名注释)

我正在使用dart 2.0.0angular 5.0.0js 0.6.1+1通过dartdevcwebdev

dart dart-js-interop dart-dev-compiler

4
推荐指数
1
解决办法
1768
查看次数

angular dart js 与客户端中等待的异步/承诺互操作

客户端.js

async function callClientAsyncFuncWithResult () {

    let result = await someService.request();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

页面.dart

import 'dart:js' as js;

var result = js.context.callMethod('callClientAsyncFuncWithResult'); 

//I want to do something like var result = await js.context.callMethod('callClientAsyncFuncWithResult'); 
Run Code Online (Sandbox Code Playgroud)

在 AngularDart 中,您如何在继续执行 dart 之前等待客户端 javascript Promise 返回结果?现在它只是流过调用,我已经尝试将 callMethod 的结果设置为 Future 或 Promise 并且它从不等待。

我不认为我的实现是正确的。我怎样才能做到这一点?

dart dart-js-interop angular-dart

4
推荐指数
1
解决办法
671
查看次数

在flutter web中使用js库

我需要带有 bpmn.js 视图的小部件:https : //github.com/bpmn-io/bpmn-js

使用 HtmlElementView:

    // ignore: undefined_prefixed_name
    ui.platformViewRegistry
        .registerViewFactory('bpmn_view', (int viewId) => element);

    return Column(
      children: <Widget>[
        Expanded(
            child: HtmlElementView(key: UniqueKey(), viewType: "bpmn_view")),
      ],
    );
Run Code Online (Sandbox Code Playgroud)

使用js:

    const html = '''
    <div id="canvas">canvas</div>
    <script>
      (function () {
        window.addEventListener('view_bpmn', function (e) {
           var bpmnJS = new BpmnJS({
               container: "#canvas"
           });

           bpmnJS.importXML(e.details);
         }, false);
      }());
    </script>
    ''';

    element.setInnerHtml(html,
        validator: NodeValidatorBuilder.common()..allowElement('script'));
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但是我在执行时出现错误:

VM4761 bpmn-viewer.development.js:18864 Uncaught TypeError: Cannot read property 'appendChild' of null
    at Viewer.BaseViewer.attachTo (VM4761 bpmn-viewer.development.js:18864)
    at Viewer.BaseViewer._init (VM4761 bpmn-viewer.development.js:18911) …
Run Code Online (Sandbox Code Playgroud)

dart-js-interop flutter-web

4
推荐指数
1
解决办法
4718
查看次数