8

Dart の例のいくつかから始めます。それからここdocument.query('#someId')で説明されているようにDOMをクエリしたかったのですが、ドキュメントにクエリメソッドがなかったようです。また、`new Element.tag('p') による新しい要素の作成も機能しません。

次に、インポートしたパッケージを から に変更すると、それが機能することがわかりましdart:domdart:html。しかし、それらの両方を使用すると、たくさんのduplicate definition of _XYZ.

だから私は疑問に思います:

  1. dart:htmldart:domパッケージはどう違いますか
  2. どちらを使用すればよいですか
  3. なぜ両方を使用できないのですか
4

4 に答える 4

10

少し順不同で答える

  1. どちらを使用する必要がありますか: dart:htmlDOM の上に最もクリーンな抽象化を提供するものを使用する必要があります。

  2. なぜ両方を使用できないのですか。厳密には必要ないはずですが、ここで説明されているダーティハックを使用して、実際に基礎となるdart:dom実装にアクセスできます。より適切でクリーンな解決策は、インポートの名前を変更する Dart の機能を使用することです。つまり、以下の@munificentによって説明されています。dart:html#import('dart:dom', prefix: 'dom');

  3. dart:html と dart:dom package の違いは何ですか。私はそれらの違いを JQuery ( dart:html) と JS DOM 操作 ( dart:dom) に似ていると考える傾向があります。

Dart チームは、JQuery (dom 操作)、 Tree.js (WebGL プログラミング)、D3 (SVG 描画)dart:htmlなどのライブラリから慣れ親しんできたように、API を (良い意味で) 簡単で驚くことのないものにするために懸命に努力しています。 )。さらに、SVG または WebGL API が DOM API と同様の構造を使用するように、これらすべての機能領域で 1 つの API スタイルに従うことも試みているため、すべての部分がうまく連携するようになっています。

更新: 2012 年5 月現在、dart:dom は廃止され、削除されます。

于 2012-01-22T13:39:22.830 に答える
7

Lars は、あなたの質問に対して素晴らしい仕事をしてくれました。追加します:

なんで両方使えないの

実際、できます。問題は、両方のライブラリがいくつかのもの (主にwindow) に同じ名前を使用していることです。両方をインポートすると、それらの名前が衝突しますが、これは Dart では許可されていません。これを解決するには、そのうちの 1 つにプレフィックスを付けてインポートできます。

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

次に、 からインポートされた名前を参照するときは、dart:htmlその名前を使用します。DOM が必要な場合は、プレフィックスを付けます。

window     // dart:html window
dom.window // dart:dom window
于 2012-01-23T21:05:06.893 に答える
6

すべての回答の更新、およびおそらくこの質問が適用されなくなるのは、dart:dom が非推奨になったことです。

Dartlang Web サイトのこの投稿を参照してください。

于 2012-05-04T13:02:46.510 に答える
0

すでに与えられた優れた答えに追加する短い答え:可能な限りdart:htmlを使用してください。必要な場合はdart:domを使用します(必要な場合はバグを入力します)。

于 2012-01-25T01:18:28.660 に答える