5

大家好:我正在尝试创建一个命名空间,这样我就可以在我的整个应用程序中使用不同的咖啡脚本文件中的类(至少这是我对你使用命名空间的理解)

我在这里找到了一个很好的例子:Coffeescript 'Namespace' 中的类

摘抄:

    namespace "Project.Something", (exports) ->
      exports.MyFirstClass = MyFirstClass
      exports.MySecondClass = MySecondClass

但是,当我实现它时,我得到:我的控制台中没有定义命名空间。

我的命名空间的实现与上面示例中的外观完全相同。似乎我的命名空间定义只是没有被咖啡脚本以某种方式识别。

有任何想法吗?这里可能有版本问题吗?

提前致谢!!!

4

1 回答 1

8

namespace问题的功能:

namespace = (target, name, block) ->
  [target, name, block] = [(if typeof exports isnt 'undefined' then exports else window), arguments...] if arguments.length < 3
  top    = target
  target = target[item] or= {} for item in name.split '.'
  block target, top

不是 CoffeeScript 的一部分,您必须自己定义该助手。大概您不想在每个文件中重复它,因此您将拥有一个包含定义的namespace.coffee文件(或或...)。但是,您将面临将函数放入全局命名空间的问题。您可以手动完成util.coffeenamespacenamespace

namespace = (target, name, block) ->
  [target, name, block] = [(if typeof exports isnt 'undefined' then exports else window), arguments...] if arguments.length < 3
  top    = target
  target = target[item] or= {} for item in name.split '.'
  block target, top

(exports ? @).namespace = namespace
# or just (exports ? @).namespace = (target, name, block) -> #...

演示:http: //jsfiddle.net/ambiguous/Uv646/

或者你可以变得时髦并使用namespace将自己放入全局范围:

namespace = (target, name, block) -> #...
namespace '', (exports, root) -> root.namespace = namespace

演示:http: //jsfiddle.net/ambiguous/3dkXa/

一旦你完成了其中的一项,你的namespace功能应该随处可用。

于 2012-05-07T17:18:22.077 回答