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/并且lib/都应该是顶级目录,否则您将无法package:导入自己的库。这就是为什么建议web/只包含入口点(带有main()方法的脚本)而其他所有内容都应该在lib/.

另外,我会尽量少用part。我发现将几乎每个文件都定义为库并导入它们要好得多。它使每个文件的依赖关系更加清晰,并允许消费者只导入接口,而不是实现。export使构建一个公开另一个定义的库成为可能。

最后,风格 nit:Dart 不是 C#,我们不会在我们的接口上使用那个丑陋的“I”前缀 :-) 只需命名你的 interface Drawable

于 2013-02-02T20:45:31.287 回答