2012-01-22 5 views
8

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

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

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

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

ответ

6

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

См. this post на веб-сайте dartlang.

10

Ответ немного из от

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

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

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

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

Обновление: с мая 2012 года dart:dom is now deprecated и будет удалено.

7

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

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

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

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

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

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

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

Смежные вопросы