未捕获的ReferenceError:在coffeescript中命名空间时未定义命名空间

cpo*_*pow 4 namespaces coffeescript

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

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

摘抄:

    namespace "Project.Something", (exports) ->
      exports.MyFirstClass = MyFirstClass
      exports.MySecondClass = MySecondClass
Run Code Online (Sandbox Code Playgroud)

但是,当我实现它时,我得到:命名空间未在我的控制台中定义.

我的命名空间在上面的示例中完全按照它的外观实现.我的命名空间定义似乎不被coffeescript以某种方式识别.

有任何想法吗?可能会出现版权问题吗?

提前致谢!!!

mu *_*ort 7

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
Run Code Online (Sandbox Code Playgroud)

不是CoffeeScript的一部分,你必须自己定义帮助者.大概你不想在每个文件中重复它,所以你有一个包含定义的namespace.coffee文件(util.coffee或者......)namespace.但是,你的问题就是让你的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

(exports ? @).namespace = namespace
# or just (exports ? @).namespace = (target, name, block) -> #...
Run Code Online (Sandbox Code Playgroud)

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

或者你可以变得时髦并且习惯于namespace将自己置于全球范围内:

namespace = (target, name, block) -> #...
namespace '', (exports, root) -> root.namespace = namespace
Run Code Online (Sandbox Code Playgroud)

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

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