从 Dart 中的 JavaScript 对象获取任意属性

2024-01-18

Edit: 这是一个说明我的问题的最小项目。 https://github.com/ahirschberg/dart-js-interop-toy您可以通过将其提供给浏览器来查看所描述的错误:pub get然后要么pub serve(飞镖)或pub build --mode=debug(其它浏览器)。

如何通过 JsObjectImpl 从 Dart 访问任意 JavaScript 属性?我正在使用 ace.js 库,该库具有与 Dart 的互操作性,该库是我从打字稿接口改编而来的,并且我调用的方法返回带有键值对的纯 JavaScript 对象。

Dart 给了我一个 JsObjectImpl,它不能转换为 Map 或 JsObject,它们都有 [] 访问器。令人困惑的是,它似乎继承自已弃用的 JSObject(注意后者中的“s”大写),它没有 [] 访问器,因此我无法获取数据。

一些错误消息:

  1. 尝试从 JsObjectImpl 转换为 JsObject 时:
    ORIGINAL EXCEPTION: type 'JSObjectImpl' is not a subtype of type 'JsObject' of 'obj' where JSObjectImpl is from dart:js JsObject is from dart:js。我在使用时收到类似的消息Map以及。

  2. Looking at the object in the debugger, I can frustratingly see the property in JS view but not in the Dart object:
    Chrome debugger showing a property with the key "4"
    The 4: Object is the data I want.


好吧,这很有趣,假期快乐:)

看起来像Map不支持自动转换package:js。所以有几件事:

  1. Filed https://github.com/dart-lang/sdk/issues/28194 https://github.com/dart-lang/sdk/issues/28194
  2. 已发送给您PR 介绍解决方法 https://github.com/ahirschberg/dart-js-interop-toy/pull/1

对于感兴趣的各方,我们可以使用浏览器原生Object.keys:

@JS()
library example;

import 'package:js/js.dart';

/// A workaround to converting an object from JS to a Dart Map.
Map jsToMap(jsObject) {
  return new Map.fromIterable(
    _getKeysOfObject(jsObject),
    value: (key) => getProperty(jsObject, key),
  );
}

// Both of these interfaces exist to call `Object.keys` from Dart.
//
// But you don't use them directly. Just see `jsToMap`.
@JS('Object.keys')
external List<String> _getKeysOfObject(jsObject);

一旦我们有一个任意的 JavaScript 对象就调用它:

var properties = jsToMap(toy.getData());
print(properties);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Dart 中的 JavaScript 对象获取任意属性 的相关文章

随机推荐

  • 如何让customAdapter填充gridview高度

    我正在开发数独应用程序 布局为 9x9 GridView 每个 GridView 包括 9 个由 customAdapter 提供的 Textview 我想让 9 个 TextView 填充每个 GridView 的高度 如何 This i
  • 为什么对于没有通过方法反射获取返回类型的 Task,Type.IsGenericType 返回 TRUE,而 typeof(Task).IsGenericTyp 返回 FALSE

    有人可以解释一下吗 根据文档是泛型类型 https learn microsoft com en us dotnet api system type isgenericparameter view netframework 4 7 2 指示
  • 原子引用的保证

    a 的语义是什么AtomicReference 如果我做 AtomicReference
  • 为什么空的 MongoDB 数据库这么大?

    当我使用命令创建新的 mongoDB 数据库实例时 mongod dbpath db where db是我在调用命令的目录中创建的文件夹 运行此命令并检查目录的大小后 我发现一切都结束了300MB大小 当其中没有数据时 这里发生了什么 谢谢
  • 如何配置 Spring Sockjs Java 客户端消息转换器

    我有一个使用 STOMP 的 SockJS Java 客户端 是基于这个https github com rstoyanchev spring websocket portfolio blob master src test java or
  • Ember.js 中的多种布局?

    来自 Rails 背景的您可以拥有多个布局 例如 匿名用户页面和经过身份验证的页面 Ember 可以做到这一点吗 我尝试在我的 UsersRouter 中声明一个新的 templateName 但没有成功 我还检查了本指南 http emb
  • 如何指定或获取 NativeScript 文本字段的资源 ID

    我们在我们的移动应用程序中使用带有 Angular 的 NativeScript 我想使用 Google Play 预发布报告功能 但我们的应用程序需要输入密码 Google Play 允许指定密码 但您需要一个资源名称 以便测试脚本可以识
  • .click() 在 IE11 中拒绝访问

    当尝试调用 click of an anchor tag to auto click网址 该代码在所有浏览器中都可以正常工作 除了Internet Explorer v11 任何帮助将不胜感激 var strContent a b c n1
  • C++ 中读取大型 CSV 文件的性能问题

    我需要读取许多大的 CSV 文件以在 C 中进行处理 范围从几 MB 到数百 MB 首先 我使用 fstream 打开 使用 getline 读取每一行并使用以下函数 分割每一行 template lt class ContainerT g
  • 持续集成时js的最佳打包策略?

    我需要打包所有的 js 但需要将其编辑到源代码管理中 有没有一个很好用的 ccnet 或 nant 插件 它可以让我打包我的 js 并在投入生产时将它们存储在相同的文件中 并不是真正寻找文件合并 只是缩小每个文件 这是我找到的最佳答案 它调
  • C++ std::atomic 变量的线程同步问题

    当下面的程序偶尔打印 坏 输出时 它会给我带来意想不到的行为 两个线程应该使用两个 std atomic 变量 s lock1 和 s lock2 进行同步 在 func2 中 为了将 s var 变量设置为 1 它必须以原子方式在 s l
  • Node.js 是否有相当于 Python 迭代器工具?

    我正在尝试移植一些使用 Python 的代码迭代器工具 https docs python org 2 library itertools html到 Node 但是我没有看到任何类似的东西 我正在专门寻找 itertools combin
  • Windows 服务 - 在“可执行文件的路径”中提供参数

    我不知道如何在 Windows 服务启动时将 常量 参数传递给它 我使用标准 NET 类 例如 ServiceBase 来实现 并使用 ServiceProcessInstaller 和 ServiceInstaller 来安装 我的服务
  • Objective-c 函数指针

    我需要做这样的事情 id myFunction aMethodDeclaredInMyClass self myFunction 任何帮助表示赞赏 如果您提前知道方法 self performSelector selector myMeth
  • 使用 C++ dll 的 C# 应用程序中的堆栈溢出

    我有一个使用 c cli 托管 dll 的 C 程序 该dll包含大量遗留代码 由相当多的win32窗口组成 问题是 dll 中的窗口需要比平均水平多一点的堆栈空间cough 由于这些不是后台进程 而是 win32 api 我需要扩大 GU
  • 在我的 Xampp 本地主机中哪里可以找到 .htaccess 文件

    我这里有一个简单的问题 我是使用 php 和 apache 的初学者 实际上我想修改 htaccess 中的一些配置 但我找不到 任何人都可以告诉我它位于哪里 TIA htaccess设置目录特定设置 它可以进入每个网络目录根据需要更改设置
  • 我真的应该删除 ValueEventListener 吗?

    DatabaseReference Ref FirebaseDatabase getInstance getReference Constants Client path Ref keepSynced true Ref addValueEv
  • 在 asp.net 中使用 SAML2.0 进行 SSO

    我的要求是在asp net中使用SAML2 0实现SSO 我这边确实有 2 个供应商 想要将用户从一个站点传递到另一站点而不登录第二个站点 我以前从未使用过SAML2 0 谁能帮我看看我该如何完成它 首先让我们区分协议和令牌格式 我假设您正
  • 在模态框中打开网页?

    这可能吗 不仅是 html 还有不同的样式表等 同时遮蔽屏幕的其余部分 谢谢你的帮助 Ann 查看Colorbox http colorpowered com colorbox Demo http colorpowered com colo
  • 从 Dart 中的 JavaScript 对象获取任意属性

    Edit 这是一个说明我的问题的最小项目 https github com ahirschberg dart js interop toy您可以通过将其提供给浏览器来查看所描述的错误 pub get然后要么pub serve 飞镖 或pub