在JavaScript库容器中存储和检索Google Dart对象

时间:2013-05-16 13:19:04

标签: javascript dart

在JavaScript库容器中存储和检索Google Dart对象

在Dart应用程序中,我使用外部JavaScript库进行各种矩阵计算。

库的特定功能并不重要,重要的是我需要存储和检索放在矩阵中的Dart对象。

Dart Class - 让图片我有一个dart对象,它有一个名为name的参数

MyDartClass mydc = new MyDartClass(something, something);
mydc.name;
// Everything works as planned 

存储

matrix = js.context.matrix
matrix.cell(1,1).store("thing", new MyDartClass(something, something));

检索

matrix.cell(1,1).has_object_of_type("thing");
// true
MyDartClass mydc = matrix.cell(1,1).retrieve("thing");

对象执行某些操作

mydc.name;
// Exception: The null object does not have a getter 'name'.
// NoSuchMethodError : method not found: 'name'
// Receiver: null
// Arguments: []

图书馆真的有效吗?
是的,它确实。我已经在纯JavaScript中做了很多次完全相同的事情并且有很多测试来测试行为(在Javascript中)

Dart是否破碎?
当我尝试使用javascriptified Hash来做同样的行为时,它就像一个魅力。

  var options = js.map({ 'dart' : new MyDartclass(something, something));
  var y = options["dart"];
  js.context.console.log(y.name);
  // Name is printed

你从检索中得到什么?
我似乎得到了某种Dart代理

    MyDartClass mydc = matrix.cell(1,1). retrieve("thing");
    js.context.console.log(mydc);

DartProxy {id: "dart-ref-20", port: DartSendPortSync}
id: "dart-ref-20"
port: DartSendPortSync
__proto__: DartProxy

我相信lib会将对象存储在哈希映射中。但似乎当我将对象检索到Dart中时,我得到的东西,但不是以我可以使用它的方式。所以我需要帮助,因为我不知道如何让它发挥作用。

  • 我是否需要对对象进行去代理?
  • 当您尝试从对象内的哈希中检索对象时,它可能是一个Dart错误
  • 也许我会错过任何不应该工作的东西。

1 个答案:

答案 0 :(得分:2)

在同一范围内传递和检索Dart对象正在起作用。在the tests of js-interop中有以下测试用例来证明它:

test('retrieve same dart Object', () {
  final date = new DateTime.now();
  js.context.dartDate = date;
  expect(js.context.dartDate, equals(date));
});

然而,多个范围似乎存在问题(以及多个事件循环)。暂时没有办法保留飞镖物体。所以你的dart对象引用会在范围结束时消失。这是一个失败的简单测试用例:

test('retrieve same dart Object', () {
  final date = new DateTime.now();
  js.scoped(() {
    js.context.dartDate = date;
  });
  js.scoped(() {
    expect(js.context.dartDate, equals(date));
  });
});

file an issue