В чем разница между пакетами "dart: html" и "dart: dom"? - PullRequest
8 голосов
/ 22 января 2012

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

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

Так что мне интересно:

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

Ответы [ 4 ]

10 голосов
/ 22 января 2012

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

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

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

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

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

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

7 голосов
/ 24 января 2012

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

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

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

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

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

window     // dart:html window
dom.window // dart:dom window
6 голосов
/ 04 мая 2012

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

См. этот пост на веб-сайте dartlang.

0 голосов
/ 25 января 2012

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

...