gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:02:33 25 4
gpt4 key购买 nike

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

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

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

Dart 类 - 假设我有一个 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 Proxy

    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 将对象深深地存储在 HashMap 中。但似乎当我将对象检索到 Dart 中时,我得到了一些东西,但不是我可以使用它的方式。所以我需要帮助,因为我不知道如何让它工作。

  • 我需要取消对对象的代理吗?
  • 当您尝试从对象内部的哈希中检索对象时,这可能是一个 Dart 错误
  • 也许我误解了一切,认为这是行不通的。

最佳答案

在同一范围内传递和检索 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 对象。所以你的 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 .

关于javascript - 在 JavaScript 库容器中存储和检索 Google Dart 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16588580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com