大家好:我正在尝试创建一个命名空间,这样我就可以在整个应用程序中使用不同coffeescript文件中的一个类(至少这是我对你使用命名空间的理解)
我在这里找到了一个很好的例子:Classes within Coffeescript 'Namespace'
摘录:
namespace "Project.Something", (exports) ->
exports.MyFirstClass = MyFirstClass
exports.MySecondClass = MySecondClass
但是,当我实现它时,我得到:命名空间未在我的控制台中定义。
我的命名空间在上面的示例中完全按照它的外观实现。似乎我的命名空间定义不会被coffeescript以某种方式识别出来。
任何想法?可能会出现版权问题吗?
提前致谢!!!
答案 0 :(得分: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
不是CoffeeScript的一部分,您必须自己定义该帮助程序。大概你不想在每个文件中重复它,所以你有一个包含namespace.coffee
定义的util.coffee
文件(或namespace
或...)。但是接下来你会遇到将namespace
函数放入全局命名空间的问题。你可以do it by hand:
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
功能应该随处可用。