0

以下

main.html

<!DOCTYPE html>

<html>
  <head>
    <title>test</title>
  </head>
  <body>
    <p id="test" draggable="true">hello world</p> 
    <script type="application/dart" src="main.dart"></script>
    <!-- for this next line to work, your pubspec.yaml file must have a dependency on 'browser' -->
    <script src="packages/browser/dart.js"></script>
  </body>
</html>

main.dart

import 'dart:html';
void main() {
  var elem = query('#test');
  elem.onDragStart.listen((evt) {
    evt.clipboardData.setData('text/html', elem.innerHtml);
  });
}

正在产生异常

The null object does not have a method 'setData'.

NoSuchMethodError : method not found: 'setData'
Receiver: null
Arguments: ["text/html", "hello world"]

我已经搜索过,但找不到关于我可能做错什么的相关信息,或者根本没有关于 dart 中的 clipboardData 的相关信息(即使 API 对这个问题保持沉默,源 dart:html 文件只是指向“本机代码"

4

2 回答 2

3

(从我对原始问题的评论)

改用这个:

evt.dataTransfer.setData('text/html', elem.innerHtml);

它是(api ref)而不是基类的属性MouseEventEvent,您可以通过显式声明它evt的类型来获得自动完成和删除编辑器警告MouseEvent

elem.onDragStart.listen((MouseEvent evt) {
  evt.dataTransfer.setData('text/html', elem.innerHtml);
});
于 2013-03-07T11:41:05.127 回答
0

clipboardData似乎已在没有警告的情况下被弃用。在 web_ui 组件中(我第一次观察到这一点),编辑器无法将 dataTransfer 属性识别为Event. 我在网络上找不到任何关于为什么进行此更改的参考(API 文档没有说明此事,我在讨论板上找不到任何最近的帖子)...

于 2013-03-07T10:54:33.837 回答