В чем разница между пакетом "dart:html" и "dart:dom"?

Я начинаю с некоторых примеров дротиков. Затем я хотел запросить DOM с document.query('#someId') Как рассказали здесь, но, похоже, в документе не было метода запроса. Также создание нового элемента по ' new Element.тег ('p') не работает.

тогда я понимаю, что это будет работать, когда я изменю импортированный пакет из dart:dom to dart:html. Но использование обоих из них дает мне кучу duplicate definition of _XYZ.

поэтому мне интересно:

  1. что разница между dart:html и dart:dom пакета
  2. какой из них я должен использовать
  3. почему я не могу использовать как

4 ответов


обновление всех ответов и, вероятно, делает этот вопрос более неприменимым-это то, что dart:dom был устаревшим.

посмотреть этот пост на сайте dartlang.


отвечая немного не в порядке

  1. какой из них я должен использовать: вы должны использовать dart:html Он обеспечивает самую чистую абстракцию поверх DOM.

  2. почему я не могу использовать оба: это должно быть строго не нужно, но вы действительно можете добраться до базового dart:dom реализаций от dart:html использование грязного взлома описано здесь. Лучшее и более чистое решение-использовать способность Dart переименовать импорт т. е. #import('dart:dom', prefix: 'dom'); как рассказала @munificent ниже.

  3. чем отличается dart: html и Dart: DOM package. Я склонен думать о разнице между ними как о подобном JQuery (dart:html) против манипуляции JS DOM (dart:dom).

команда Dart изо всех сил пытается сделать dart:html API так же легко и неудивительно (в хорошем смысле) использовать, как мы привыкли к таким библиотекам, как JQuery (dom manipulation), дерево.js (Программирование WebGL) и D3 (рисунок SVG). Кроме того, они также пытаются следовать одному стилю API во всех этих областях функциональности, чтобы SVG или WebGL API использовали аналогичные конструкции, как DOM API, тем самым гарантируя, что все части хорошо играют вместе.

обновление: по состоянию на май 2012 dart: dom теперь устарел и будет удален.


Ларс проделал отличную работу с вашим вопросом. Я просто добавлю:

Почему я не могу использовать оба

вы можете, на самом деле. Проблема в том, что обе библиотеки используют одни и те же имена для нескольких вещей (в основном window). Когда вы импортируете оба из них, эти имена сталкиваются, что Dart не позволяет. Чтобы решить эту проблему, вы можете импортировать один из них с префиксом:

#import('dart:html');
#import('dart:dom', prefix: 'dom');

затем, когда вы ссылаетесь на имя импортируемого из dart:html, вы просто используете имя. Когда вы хотите DOM один, вы префикс его:

window     // dart:html window
dom.window // dart:dom window

короткий ответ, чтобы добавить к отличным ответам, уже данным: используйте dart: html, когда сможете. Используйте dart: dom, когда вы должны (и введите ошибку, если вам нужно).