2012-01-22 59 views
8

我從一些Dart示例開始。然後我想按照here所述的document.query('#someId')來查詢DOM,但似乎在文檔中沒有查詢方法。另外通過`new Element.tag('p')創建一個新元素不起作用。「dart:html」和「dart:dom」包有什麼區別?

然後我發現它可以工作,當我將導入的包從dart:dom更改爲dart:html。但使用他們兩個給了我一堆duplicate definition of _XYZ

所以我想:

  1. 什麼是dart:htmldart:dom包之間的差別
  2. 哪一個,我應該使用
  3. 我爲什麼不能同時使用

回答

6

所有答案的更新,並可能使此問題不再適用的是,dart:dom已被棄用。

請參閱dartlang網站上的this post

10

回答有點出入訂單

  1. 我應該使用哪一個:您應該使用dart:html它提供了DOM上最清潔的抽象。

  2. 爲什麼不能我使用這兩種:應該嚴格不需要,但你可以從dart:html使用骯髒的黑客真正得到底層dart:dom實施方案所描述here。更好和更乾淨的解決方案是使用Dart重新命名進口的能力,即#import('dart:dom', prefix: 'dom');,如下面的@munificent所述。

  3. dart:html和dart之間的區別:dom包。我傾向於認爲它們與JQuery(dart:html)相比與JS DOM操作(dart:dom)類似。

的鏢隊正努力使dart:html API一樣簡單和令人吃驚(的好辦法)來使用,因爲我們已經得到了從庫中被用於如jQuery(DOM操作),Tree.js(WebGL的編程)和D3(SVG繪圖)。此外,他們還嘗試在所有這些功能領域遵循一種API風格,以便SVG或WebGL API使用與DOM API類似的構造,從而確保所有部分良好地一起工作。

更新:截至2012年5月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(並且如果你必須輸入一個bug的話)。