2

我有一些在我的代码中使用和扩展的 CoffeeScript 类。我怎样才能使用 angularjs 而不必创建通常的模块,比如

MyNamespace = MyNamespace || {}
MyNamespace.SuperClass = class

在不同的文件中

MyNamespace = MyNamespace || {}
class ChildClass extends MyNamespace.SuperClass
MyNamespace.ChildClass = ChildClass

我可以简单地写

angular('MyModule').factory, 'SuperClass', () ->
    class SuperClass
        constructor: (@id) ->
    return SuperClass

并通过该类扩展

angular('MyModule').factory, 'ChildClass', ['SuperClass', (SuperClass) ->
    class ChildClass extends SuperClass
        constructor: (id) ->
            super(id)
    return ChildClass
]

我的问题实际上是我使用 CoffeeScript 将所有对象编译成一个文件。现在,如果子类在基类之上,则基类将是未定义的,我会得到一个错误。我正在寻找一种优雅而简单的方法来解决这个问题。

4

2 回答 2

1

使用 Angular,您可以取消将类放在命名空间中,因为您的模块/服务的名称可以被限定并有效地服务于相同的目的。

我认为 Angular 不会帮助确保您的超类代码在您的子类代码之前运行。为此,似乎有大约 8000 种解决问题的方法,但没有一种是标准的——requireJs、coffeetoaster、brunch、grunt、cake......

我使用 grunt,并指定我想连接我的咖啡脚本的顺序。

于 2012-10-04T02:39:26.567 回答
1

如果您使用 Angular 的 DI 系统,它应该确保您的类以正确的顺序实例化,而不管哪个先加载。你的例子真的有问题吗?

于 2012-10-04T15:58:08.233 回答