dart clipboardData всегда нуль

Следующее

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 в dart вообще (даже API ничего не говорит об этой проблеме, а исходный файл dart:html просто указывает на «собственный код "


person ovangle    schedule 07.03.2013    source источник
comment
Просто чтобы проверить - это данные буфера обмена, или evt.dataTransfer.setData('text/html', elem.innerHtml); вам подойдет?   -  person Chris Buckett    schedule 07.03.2013
comment
Да, dataTransfer — это атрибут, который я ищу. Должно быть, он недавно изменился — он по-прежнему clipboardData в документах API, а dataTransfer выдает мне предупреждение в редакторе, но, похоже, он работает. Спасибо!   -  person ovangle    schedule 07.03.2013
comment
Я добавил новый ответ, который преобразует мой комментарий выше в ответ (а также обращается к предупреждению автозаполнения/редактора)   -  person Chris Buckett    schedule 07.03.2013


Ответы (2)


(Из моего комментария к исходному вопросу)

Используйте это вместо этого:

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

Это атрибут MouseEvent (ссылка API), а не базовый класс Event, и вы можете получить автозаполнение и удалить предупреждения редактора, явно объявив, что evt имеет тип MouseEvent:

elem.onDragStart.listen((MouseEvent evt) {
  evt.dataTransfer.setData('text/html', elem.innerHtml);
});
person Chris Buckett    schedule 07.03.2013

clipboardData, кажется, устарело без предупреждения. В компонентах web_ui (где я впервые это заметил) атрибут dataTransfer не распознается редактором как допустимый атрибут для экземпляров Event. Я не могу найти в Интернете никаких ссылок на то, почему это изменение было сделано (документы API ничего не говорят по этому поводу, и я не смог найти никаких последних сообщений на доске обсуждений)...

person ovangle    schedule 07.03.2013