繁体   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