dart clipboardData始终为null

时间:2013-03-07 08:04:52

标签: dart dart-html

以下

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"]

我已经搜索过了,但是找不到关于我可能做错的相关信息,或者根本没有找到关于clipboardData的相关信息(即使API在问题上是沉默的,而源dart:html文件只是指向“本地代码”

2 个答案:

答案 0 :(得分:3)

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

请改用:

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

这是attribute on MouseEvent (api ref)而不是基础Event类,您可以通过明确声明evt类型为MouseEvent来获取自动填充并删除编辑器警告:< / p>

elem.onDragStart.listen((MouseEvent evt) {
  evt.dataTransfer.setData('text/html', elem.innerHtml);
});

答案 1 :(得分:0)

clipboardData似乎已被弃用而未发出警告。在web_ui组件中(我第一次观察到这一点),编辑器无法将dataTransfer属性识别为Event实例的有效属性。我在网上找不到任何有关为何进行此更改的参考资料(API文档没有就此事发表任何意见,我在论坛上找不到最近的帖子)......