2012-01-22 11 views
8

Sto iniziando con alcuni esempi di Dart. Quindi volevo interrogare il DOM con document.query('#someId') come descritto here, ma sembra che non ci fosse alcun metodo di interrogazione nel documento. Anche la creazione di un nuovo elemento con `new Element.tag ('p') non funziona.Qual è la differenza tra "dart: html" e "dart: dom" pacchetto?

Quindi ho capito che funzionerà, quando cambio il pacchetto importato da dart:dom a dart:html. Ma l'utilizzo di entrambi mi dà un po 'di duplicate definition of _XYZ.

Allora mi chiedo:

  1. Qual è la differenza tra il dart:html e pacchetto dart:dom
  2. quale dovrei usare
  3. perché non posso usare entrambi

risposta

6

Un aggiornamento a tutte le risposte e probabilmente rende questa domanda non più applicabile è che dart: dom è stato deprecato.

Vedere this post sul sito Web di dartlang.

10

Risposta a un po 'fuori di ordine

  1. Quale dovrei usare: dovresti usare dart:html fornisce l'astrazione più pulita in cima al DOM.

  2. perché non posso utilizzare sia: non dovrebbe essere strettamente necessario, ma si può effettivamente ottenere alle risultanze dart:dom implementazioni da dart:html utilizzando un hack sporco descritto here. La soluzione migliore e più pulita è quella di utilizzare la capacità di Dart di rinominare le importazioni, ad esempio #import('dart:dom', prefix: 'dom'); come descritto da @munificent di seguito.

  3. qual è il diverso tra dart: html e dart: pacchetto dom. Tendo a pensare alla differenza tra loro come simile a JQuery (dart:html) rispetto alla manipolazione JS DOM (dart:dom).

Il team Dart è difficile cercare di rendere le API dart:html più semplice e sorprendente (in senso buono) da utilizzare come abbiamo abituati a da librerie come jQuery (manipolazione del DOM), Tree.js (programmazione WebGL) e D3 (disegno SVG). Inoltre cercano anche di seguire uno stile API in tutte queste aree di funzionalità in modo che le API SVG o WebGL utilizzino costrutti simili come API DOM, garantendo in tal modo che tutte le parti funzionino bene insieme.

Aggiornamento: a partire da maggio 2012 dart:dom is now deprecated e verrà rimosso.

7

Lars ha fatto un ottimo lavoro con la tua domanda. Mi limiterò a aggiungo:

perché non posso Io uso sia

È possibile, in realtà. Il problema è che entrambe le librerie usano gli stessi nomi per alcune cose (principalmente window). Quando si importano entrambi, questi nomi scontrano, che Dart non consente.Per risolvere questo, è possibile importare uno di loro con un prefisso:

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

Poi, quando si fa riferimento a un nome importato da dart:html, basta utilizzare il nome. Quando si desidera un DOM uno, si è prefisso:

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

La risposta breve da aggiungere alle eccellenti risposte già date: Usa dardo: html ogni volta che potete. Usa la freccia: dom quando devi (e inserisci un bug se devi).