2012-01-22 14 views
8

Estoy empezando con algunos de los ejemplos de Dart. Entonces quise consultar el DOM con document.query('#someId') como se describe en here, pero parece que no había un método de consulta en el documento. Además, la creación de un nuevo elemento mediante `new Element.tag ('p') no funciona.¿Cuál es la diferencia entre el paquete "dart: html" y "dart: dom"?

Luego me doy cuenta de que funcionará, cuando cambie el paquete importado de dart:dom a dart:html. Pero usar ambos me da un montón de duplicate definition of _XYZ.

Por eso me pregunto:

  1. lo que es la diferencia entre dart:html y dart:dom paquete
  2. cuál debería usar
  3. por qué no puedo usar tanto

Respuesta

6

Una actualización de todas las respuestas, y probablemente hace que esta pregunta ya no sea aplicable es que dart: dom ha quedado en desuso.

Ver this post en el sitio web dartlang.

10

Respondiendo un poco fuera del orden

  1. ¿Cuál debo utilizar: se debe utilizar dart:html que proporciona la abstracción más limpio en la parte superior de la DOM.

  2. Por qué no puedo utilizar ambos: no debería ser estrictamente necesario, pero en realidad se puede llegar a la dart:dom implementaciones subyacentes de dart:html usando un truco sucio descrito here. La solución mejor y más limpia es utilizar la capacidad de Dart para cambiar el nombre de las importaciones, es decir, #import('dart:dom', prefix: 'dom'); como se describe en @munificent a continuación.

  3. cuál es la diferente entre dart: html y dart: paquete dom. Tiendo a pensar en la diferencia entre ellos como similar a JQuery (dart:html) frente a la manipulación JS DOM (dart:dom).

El equipo dardo está tratando de hacer que la API dart:html lo más fácil y sorprendente (en el buen sentido) para su uso como nos hemos acostumbrado a partir de las bibliotecas como jQuery (manipulación DOM), Tree.js (programación WebGL) y D3 (dibujo SVG). Además, también intentan seguir un estilo de API en todas estas áreas de funcionalidad para que la API SVG o WebGL use construcciones similares a la DOM API, garantizando así que todas las piezas se reproduzcan juntas.

Actualización: a partir de mayo de 2012 dart:dom is now deprecated y se eliminarán.

7

Lars hizo un excelente trabajo con su pregunta. Voy a añadir a:

por qué no puedo yo uso tanto

Usted puede, en realidad. El problema es que ambas bibliotecas usan los mismos nombres para algunas cosas (principalmente window). Cuando los importa a ambos, esos nombres colisionan, lo que Dart no permite.Para resolver esto, puede importar una de ellas con un prefijo:

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

Entonces, cuando se hace referencia a un nombre importado de dart:html, sólo tiene que utilizar el nombre. Cuando se desea un DOM uno, el prefijo es:

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

La respuesta corta a añadir a las excelentes respuestas ya dadas: El uso de dardos: html siempre que pueda. Usa dart: dom cuando debas (e ingresa un error si es necesario).