如何与 dart 中的 js 交互?

2023-12-13

不,这与同名的其他问题不同。

有一些看似相同的包可以做到这一点,但具有不同的 api。

  • http://dart-lang.github.io/js-interop/docs/js.html
  • https://api.dartlang.org/docs/channels/stable/latest/dart_js.html

为什么有两个?

我们应该使用哪一个?

互操作看起来较新,并且有更好的 api,但实际上不起作用。根据文档,您应该能够转换此 javascript:

var stage = new PIXI.Stage(0xFFFFFF);;
renderer = PIXI.autoDetectRenderer(800, 600);
document.body.appendChild(renderer.view);

Into:

var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff);
var renderer = js.context.PIXI.autoDetectRenderer(400, 400);
document.body.append(renderer.view);

但是当你尝试编译它时会出现错误:

dart2js
Error occured:/Users/doug/megac/client/public/dart/index.dart:7:27:
Warning: No member named 'PIXI' in class 'Proxy'.
var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff);
^^^^^^^^^^^^^^^

那么... js:dart?那是你应该使用的吗?

编辑:顺便说一句,对于任何偶然发现这个问题的人来说,还有一个未解决的错误关于缩小的 dart-js 互操作桥接操作目前无法工作的问题。最初的问题是在 2013 年 5 月报告的,从那时起就没有采取任何行动,所以不要屏住呼吸。


Js 互操作始于包:js。它是用窗口.postMessage.

Later dart:js已添加以提供更好的性能并减少编译后的 js 文件的大小。基本上目标是:

  • 删除范围和生命周期手动处理
  • 避免使用 noSuchMethod 来保持尽可能低的编译大小
  • 重命名对象以使 api 更容易理解

Once dart:js已经准备好了,包:js已重写使用dart:js在盖子下。

包:js提供了更简单的 Api,但代价是增加了 js 大小(因为包:js uses 飞镖:镜子 and 没有这样的方法).

这是同样的事情包:js and dart:js :

import 'package:js/js.dart' as js;

main() {
  var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff);
  var renderer = js.context.PIXI.autoDetectRenderer(400, 400);
  document.body.append(renderer.view);
}

import 'dart:js' as js;

main() {
  var pixi = new js.JsObject(js.context['PIXI']['Stage'], [0xffffff]);
  var renderer = js.context['PIXI'].callMethod('autoDetectRenderer', [400, 400]);
  document.body.append(renderer['view']);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何与 dart 中的 js 交互? 的相关文章

随机推荐

  • 如何使用第一个下拉列表中选定的值填充第二个下拉列表?

    假设我有两个下拉菜单 它们在我的 jsp 加载时填充
  • Java 文件下载挂起

    我有一个用于下载文件的网络界面 当请求到来时 我的 glassfish 服务器从 Web 服务流式传输文件 然后将内容写入输出流 我的代码工作正常 除非文件大小变得非常大 例如超过 200 MB 它会挂起 在浏览器中显示 0 下载 并且文件
  • 为什么在我的例子中字符串不相等?

    I have currencyFormatter那是与se SV locale var currencyFormatter NumberFormatter let formatter NumberFormatter formatter cu
  • 使用 webpack 和 bootstrap-loader 时 $(...).modal is not a function(...) 错误

    我在打开模态时遇到问题 modal id modal show 功能 在缩小问题范围后 我相信这与 webpack 加载我的依赖项或特别是 jQuery 依赖项有关 以下是我的 webpack 配置的必要部分 entry js bootst
  • Kafka Streams:如何使用 persistenceKeyValueStore 从磁盘重新加载现有消息?

    我的代码当前使用 InMemoryKeyValueStore 这避免了对磁盘或 kafka 的任何持久化 我想使用rocksdb Stores persistentKeyValueStore 以便应用程序将从磁盘重新加载状态 我正在尝试实现
  • 如何纠正 Damerau-Levenshtein 实施中的错误?

    我带着另一个较长的问题回来了 尝试过许多基于 Python 的 Damerau Levenshtein 编辑距离实现 我终于找到了下面列出的那个 as editdistance reference 它 似乎提供了正确的结果并且似乎有一个有效
  • 如何使用guard语句来检测赋值后的nil?

    我正在尝试使用 Guard 语句来检查是否为零 我很困惑为什么以下内容让它漏掉并生成 BAD EXEC 错误 guard let event Event eventsImagesLoading removeValueForKey locat
  • PDO_OCI - 进入 clob 字段

    我想在 Oracle DB 中插入一些 base64 编码的数据 每个字段最多 500 000 个字符 因为在我开始使用 PDO 并将字段设置为 CLOB 之前 我没有将 Oracle 与 PHP 一起使用 我的代码的简短版本 Db 类扩展
  • 在 Box2D 中制作漩涡

    我试图通过施加力在 C Objective C 上的 Box2D 中制作螺旋涡流 我想实现的是一个将物体从一个点推开或吸引它们的漩涡 我想我必须施加不止一种力量 我解决这个问题的切入点是 我想我必须施加三种力量 吸引或排斥身体中心的冲动 想
  • 将方法传递给迭代器方法时发生了什么

    众所周知 谁可以通过 a 将方法传递给迭代器方法 prefix 例如 a b map upcase gt A B def rettwo 2 end a b map rettwo gt 2 2 问题是 当我编写一个方法时 传递一个方法 前缀
  • 取出字符串中所有其他单词的算法?

    在 Javascript 中 如果我有一个像这样的字符串 你好 很高兴见到你 我希望返回的是奇怪地方的单词 这样我就会得到 你好 我怎样才能为此编写代码 您可以使用filter创建一个包含偶数索引元素的新数组 请记住 奇数 位置中的单词实际
  • 在完整节点中使用缩略图进行上一个/下一个节点导航

    我一直在试图解决这个问题并使其发挥作用 但由于我不是程序员 只是一名编码知识有限的设计师 所以我在这方面一直碰壁 我正在制作自己的照片库 我想将前两张或下一张图像显示为链接的缩略图 我发现这个脚本可以工作并显示文本链接 但不知道如何使其适应
  • 格式化日期的简单方法

    我写了一个 perl 脚本来获取日期时间 它确实有效 但我确实想知道是否有更简单的方法将日期格式设置为输出 usr bin perl use DateTime my dt DateTime gt now time zone gt local
  • Webapi 在本地工作,但在使用子域托管时无法工作

    我正在构建一个简单的 Web api 它从数据库检索客户余额 在 IIS 本地托管的一切都运行良好 该 api 从正文中获取一个参数 public static void Register HttpConfiguration config
  • fragment.onCreateView 导致空指针异常

    所以我正在使用片段并尝试在它们上连接点击侦听器 public View onCreateView LayoutInflater inflater ViewGroup container Bundle savedInstanceState V
  • Django:存储图像数据库

    早些时候我使用默认数据库 sqlite3 但今天我将其更改为 postgresql 我想将图像文件保存在数据库中而不是项目目录本身中 我怎样才能做到这一点 将图像存储在数据库中并不是一个好主意media文件夹 但你可以使用二进制字段为了这
  • Unicode 中可能的组合字符序列

    有些字符未包含在 Unicode 中 即带重音的西里尔字母 但可以使用组合序列创建 据我了解 可能的组合字符序列是在布局引擎和 或使用的字体中定义的 我对吗 那么 如何得到所有可能的组合序列呢 您是正确的 尝试创建任意组合序列对于布局引擎和
  • 如何只打印文本?

    我正在尝试将一些文本发送到打印机 我只需要打印文本 在页边距处包裹并在必要时流到另一页 这是我现在正在做的一个最小的例子 FXML private void print TextArea printArea new TextArea tex
  • 向数组添加一个元素

    我正在从源读取数据作为数组 一个 我需要向数组中再添加一个元素 获得数组后 我创建一个容量为 n 1 的新数组 并将所有元素复制到新数组中 并将新元素作为数组的最后一个元素 我可以做这个 有一个更好的方法吗 尤其是 Linq 您所描述的实际
  • 如何与 dart 中的 js 交互?

    不 这与同名的其他问题不同 有一些看似相同的包可以做到这一点 但具有不同的 api http dart lang github io js interop docs js html https api dartlang org docs c