从dart创建javascript对象

时间:2016-09-07 18:07:16

标签: javascript dart

我有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转换。

1 个答案:

答案 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);