3

我在最新的 js-interop 库中看到了一些奇怪的变化,我想知道是否有人可以对此进行澄清。

升级到最新版本后,我注意到 dart2js 不再工作了。经过一番调查,我得出结论,原因是 js-interop 库中的一个 @proxy 注释(这里也提到)。

正因为如此,我在几个版本之间切换,我注意到像 scoped 这样的一些功能在短短几天内就被弃用了,之后它就被完全删除了!如果您错过了此功能被标记为已弃用的中间版本,您将错过提供有关它的一些信息的提示。另请注意,dartlang.org 上有关 js 库的主要教程甚至没有提示它的大部分内容已经过时。

我决定回到版本 0.0.26,虽然它似乎像以前一样工作......我注意到在一个实例中,当从 dart 中的 javascript 上下文中检索变量时,我收到了一个 dart DateTime 对象而不是 js.Proxy 对象。

回到较早的版本(v0.0.25),正如预期的那样,当使用来自 js 上下文的变量时,我取回了我的 js.Proxy。

奇怪的是,在github上的版本一直到 0.0.25(按预期工作),而pub上的版本还有 3 个版本,这些版本都破坏了很多向后兼容性(有时需要),而没有明确说明发生了什么on(我觉得有点令人沮丧)。

有人可以澄清正在发生的事情以及我对未来的期望吗?

http://pub.dartlang.org/packages/js

4

1 回答 1

2

所有这些重大更改都已在未来的 package:jsBREAKING CHANGE: package:js deprecated features removed中公布。

基本上,从 0.0.26 开始,package:js现在与dart:js一起烘焙。这种变化伴随着几件事:

  • 不再需要范围/保留/释放
  • 现在有几种类型直接在 Dart 和 Js 之间传输而不是代理
    • null, bool, num, String,DateTime
    • Blob
    • KeyRange
    • ImageData
    • TypedData, 包括它的子类Int32List, 但不是ByteBuffer
    • Node
  • 来自 shadow dom 的元素现在也可以转移了
  • Callback现在不再需要。
  • 一个非常大的性能改进

这是一个快速迁移指南:

  • 范围:删除js.retainjs.releasejs.scoped
  • 替换new Callback.xxxx(f)f并删除callback.dispose()
  • Proxy根据上述列表替换为可转移类型。
于 2013-11-05T20:56:34.923 回答