我目前正在开发一个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) 当我的飞镖项目中使用第三方JavaScript库,我手动经过库的文档,并通过其属性和方法遍历一系列繁琐打造达特代码context和callMethod电话. 有没有人想出一种自动化方法?
我试图找到一个内省JavaScript库的命令行界面,以便我可以自动生成Dart源代码.我的搜索一直没有成功.
我想在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 代码来演示我想要实现的目标。它应该输出传递给方法的对象,然后输出属性“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)
在控制台中执行以下日志“未定义”。
我试图将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"对象来检索我需要的数据.
有谁能够帮我?
编辑:这是一个说明我的问题的最小项目。您可以通过将其提供给浏览器来查看所描述的错误:pub get然后是pub serve(dartium) 或pub build --mode=debug(其他浏览器)。
如何通过 JsObjectImpl 从 Dart 访问任意 JavaScript 属性?我正在使用 ace.js 库和 Dart 的互操作,我从打字稿接口改编而来,我调用的方法返回一个带有键值对的普通 javascript 对象。
Dart 给了我一个 JsObjectImpl,它不能转换为 Map 或 JsObject,两者都有 [] 访问器。它令人困惑地似乎是从不推荐使用的 JSObject 继承的(注意“s”在后者中大写),它没有 [] 访问器,因此我无法获取数据。
一些错误信息:
我读
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
我希望得到更多细节。但缺少文件。欢迎任何提示。谢谢
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.0、angular 5.0.0和js 0.6.1+1通过dartdevc。webdev
客户端.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 并且它从不等待。
我不认为我的实现是正确的。我怎样才能做到这一点?
我需要带有 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 ×10
dart ×9
javascript ×3
flutter-web ×2
angular-dart ×1
chart.js ×1
flutter ×1