我有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
}
落镖:
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]
(树是Dart中getTreeData()的类型)
如何以DART PRINT中打印的格式获取对象?我想将它用作简单的js对象,忘记js方面的任何dart对象。 (当我看到那个&#39; o&#39; objet,我看不到&#39;孩子&#39;和&#39;属性,还有其他东西的赃物)
小注意:我知道json可用于该通信,但我想要js对象而不进行任何json转换。
答案 0 :(得分:1)
正如Gunter建议的那样,我应该使用dart-js-interop。 所以我在dart中创建了js对象--JsTree。为了填充我遍历树的数据。
对象声明如下:
@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);
在飞镖中我打电话给:
Tree jsTree = copyDartTree(treeData);
// call js function
buildTree(jsTree);