我有一个 Dart 应用程序,它读取数据并从 javascript 调用方法以从该数据中绘制一棵树(在 D3 中) 我想在 Dart 端创建 js 对象并在 javascript 端绘制它。
但是在 Dart 方面我得到了预期的结果并且无法正确转换为 js 对象..
JavaScript:
var treeRoot = [{}]; // <-- I want to fill this object on Dart side
function updateTree() {
var nodes = tree.nodes(treeRoot).reverse(), // <- use this object on js side
links = tree.links(nodes);
// .. code for tree drawing
}
Dart :
Future _showTree() async {
var treeData = getTreeData();
// try to fill js object with my data
js.context['treeRoot'] = new js.JsObject.jsify([treeData]);
// DART PRINT
var treeRoot = await js.context['treeRoot'];
print('dart : treeRoot\n' + treeRoot.toString());
js.context.callMethod('updateTree');
}
作为 DART PRINT 的结果,我看到了我所期望的:
dart : treeRoot
[name: A 1
child: {
name: B 1
child: {
name: D 1
}
child: {
name: E 1
}
}
child: {
name: C 1
}
]
但是当我从控制台查看 treeRoot(检查 js 对象)时,我得到了
[DartObject
o: Tree
__proto__: DartObject]
(Tree 是 Dart 中的 getTreeData() 类型)
如何获得在 DART PRINT 中打印的格式的对象?我想将它用作简单的 js 对象,忘记 js 端的任何 dart 对象。 (当我查看那个 'o' 对象时,我没有看到 'child' 和 'name' 属性,还有很多其他东西)
小提示:我知道 json 可以用于该通信,但我想要没有任何 json 转换的 js 对象。
最佳答案
正如 Gunter 所建议的,我应该使用 dart-js-interop。 所以我在 dart - JsTree 中创建了 js 对象。为了填充数据,我遍历了树。
对象声明如下:
@anonymous
@JS()
class Tree {
external String get name;
external set name(String value);
external List<Tree> get children;
external set children(List<Tree> value);
}
@JS()
external buildTree(Tree tree);
在 Dart 中我调用:
Tree jsTree = copyDartTree(treeData);
// call js function
buildTree(jsTree);
关于javascript - 从 dart 创建 javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39376578/