簡體   English   中英

“dart:html”和“dart:dom”包之間有什么區別?

[英]What's the difference between “dart:html” and “dart:dom” package?

我從一些Dart例子開始。 然后,我想查詢與DOM document.query('#someId')所描述的在這里 ,但似乎已在文件中沒有查詢方法。 通過`new Element.tag('p')創建一個新元素也行不通。

然后我發現當我將導入的包從dart:dom更改為dart:html時它會起作用。 但是使用它們都給了我一堆duplicate definition of _XYZ

所以我想知道:

  1. dart:htmldart:dom包之間的區別是什么
  2. 我應該使用哪一個
  3. 為什么我不能同時使用兩者

回答有點亂

  1. 應該使用哪一個 :你應該使用dart:html它在DOM之上提供最干凈的抽象。

  2. 為什么我不能同時使用它 :它應該嚴格不需要,但你實際上可以使用這里描述的臟黑客從dart:html實現底層dart:dom實現。 更好更干凈的解決方案是使用Dart重命名導入的功能,即#import('dart:dom', prefix: 'dom'); 正如下面的@munificent所描述的那樣。

  3. 什么是dart:html和dart:dom包之間的差異 我傾向於認為它們之間的區別與JQuery( dart:html )和JS DOM操作( dart:dom )類似。

Dart團隊正在努力使dart:html API變得簡單且不令人驚訝(以良好的方式)使用,因為我們已經習慣了來自JQuery(dom manip ), Tree.js (WebGL編程)和D3等庫。 (SVG圖)。 此外,他們還嘗試在所有這些功能區域中遵循一種API樣式,以便SVG或WebGL API使用與DOM API類似的構造,從而確保所有部分可以很好地協同工作。

更新 :截至2012年5月dart:dom現已棄用 ,將被刪除。

Lars在你的問題上表現出色。 我只想補充一下:

為什么我不能同時使用它們

你可以,實際上。 問題是兩個庫都為一些東西(主要是window )使用相同的名稱。 當您導入它們時,這些名稱會發生​​碰撞,Dart不允許這些名稱。 要解決此問題,您可以使用前綴導入其中一個:

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

然后,當您引用從dart:html導入的名稱時,您只需使用該名稱。 當你想要一個DOM時,你的前綴是:

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

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

請參閱dartlang網站上的這篇文章

簡短的回答添加到已經給出的優秀答案:盡可能使用dart:html。 必要時使用dart:dom(如果必須,請輸入錯誤)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM