" dart:html"之间的区别是什么?和" dart:dom"包?

时间:2012-01-22 12:11:07

标签: package dart dart-html

我从一些Dart示例开始。然后我想按照here所述document.query('#someId')查询DOM,但似乎文档中没有查询方法。通过`new Element.tag('p')创建一个新元素也行不通。

然后当我将导入的包从dart:dom更改为dart:html时,我发现它会起作用。但是使用它们都给了我一堆duplicate definition of _XYZ

所以我想知道:

  1. dart:htmldart:dom
  2. 之间的区别是什么
  3. 我应该使用哪一个
  4. 为什么我不能同时使用

4 个答案:

答案 0 :(得分:10)

有点无序回答

  1. 我应该使用哪一个:您应该使用dart:html它在DOM之上提供最干净的抽象。

  2. 为什么我不能同时使用:严格来说不需要它,但实际上你可以使用脏黑客从dart:dom获取基础dart:html实现描述here。更好,更干净的解决方案是使用Dart重命名导入的功能,即#import('dart:dom', prefix: 'dom');,如下面的@munificent所述。

  3. 什么是dart:html和dart:dom包之间的差异。我倾向于认为它们之间的区别与JQuery(dart:html)和JS DOM操作(dart:dom)类似。

  4. Dart团队正在努力使dart:html API变得简单且不令人惊讶(以良好的方式)使用,因为我们已经习惯了来自JQuery(dom操纵)等库,{{3} (WebGL编程)和Tree.js(SVG绘图)。此外,他们还尝试在所有这些功能区域中遵循一种API样式,以便SVG或WebGL API使用与DOM API类似的构造,从而确保所有部分可以很好地协同工作。

    更新:自2012年5月起D3将被删除。

答案 1 :(得分:7)

Lars在你的问题上表现出色。我只想添加:

  

为什么我不能同时使用

你可以,实际上。问题是两个库都为一些东西使用相同的名称(主要是window)。当您导入它们时,这些名称会发生​​碰撞,Dart不允许这些名称。要解决此问题,您可以使用前缀

导入其中一个
#import('dart:html');
#import('dart:dom', prefix: 'dom');

然后,当您引用从dart:html导入的名称时,您只需使用该名称。如果你想要一个DOM,你可以加上前缀:

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

答案 2 :(得分:6)

所有答案的更新,并且可能使这个问题不再适用,dart:dom已被弃用。

请参阅dartlang网站上的this post

答案 3 :(得分:0)

简短的回答添加到已经给出的优秀答案:尽可能使用dart:html。必要时使用dart:dom(如果必须,请输入错误)。