1

Windows8でDartEditorを使用して「Webアプリケーション」を作成すると、この階層が得られます

ClientView/
  packages/
  pubspec.lock
  pubspec.yaml
  web/
    packages/
    clientview.css
    clientview.dart
    clientview.dart.js
    clientview.dart.js.deps
    clientview.dart.js.map
    clientview.html

次に、lib/ファイルを追加します。

  web/
    ...
    lib/
      src/
        canvas.dart
        i_drawable.dart
        node.dart
      client_canvas.dart
    ...

client_canvas.dartファイル

library client_view;

import 'dart:html';
import 'package:meta/meta.dart'; 

// Interface
part 'src/i_drawable.dart';

// Class
part 'src/canvas.dart';
part 'src/node.dart';

'part'キーワードの後に​​含まれる各ファイルに、次の行を追加しました。

part of client_view;

しかし、他のダーツコードからはどのクラスにもアクセスできないようです

class Canvas implements IDrawable // no such type 'IDrawable'
abstract class Node implements IDrawable // no such type 'IDrawable'
class CustomNode extends Node // no such type 'Node' (if try to create a custom node)

私がまだ理解していないのは、パブや図書館の整理方法だと思います。

そこで、同じプロジェクト内にライブラリを作成しようとしました。そのライブラリを、clientview.htmlファイルによって呼び出されるclientview.dartファイル内にインポートしたいと思います。

あなたの助けをいただければ幸いです!

4

1 に答える 1

1

相対インポートを使用していて、すべてが同じライブラリの一部であるように見えるため、エラーの明確な理由はわかりません。もう少し詳細を共有できるかもしれません。

ただし、おそらくソース ツリーを再編成して、Pub の標準に合わせてインライン化する必要があります。どちらも最上位のディレクトリである必要があります。そうしないと、独自のライブラリをインポートできなくなりweb/ます。これが、エントリ ポイント (メソッドを含むスクリプト) のみを含め、他のすべてを に含めることをお勧めする理由の 1 つです。lib/package:web/main()lib/

また、私はpart非常に控えめに使用しようとします。ほとんどすべてのファイルをライブラリとして定義し、それらをインポートする方がはるかに優れていると思います。これにより、各ファイルの依存関係がより明確になり、消費者は実装ではなくインターフェイスのみをインポートできます。export別の定義を公開するライブラリの構築を可能にします。

最後に、スタイルのニット: Dart は C# ではなく、インターフェイスで醜い 'I' プレフィックスを使用しません:-) インターフェイスに名前を付けるだけDrawableです。

于 2013-02-02T20:45:31.287 に答える