coffeescript中的名称空间

| 我想像使用JavaScript那样使用关键字\“ with \”来使用名称空间,但是CoffeeScript将其报告为保留关键字,并拒绝编译,有什么办法可以在CS中使用名称空间吗? 特别是,我想动态地包含CoffeeScript文件(受信任的源),就像为数据库架构加载模型一样,但是我希望所包含的脚本能够访问本地名称空间。 编辑: 这是我想做的。我正在建立一个将目录树映射到基于express和mongoose的应用程序的Web框架。例如,有一个子目录\“ models \”,其中包含文件\'user.coffee \',其中的代码如下:
name:
    type: String
    unique: on
profiles: [ Profile ]
因此,“ 1”是一个位于名为“ 2”的本地对象中的类。加载用户模型时,我希望它访问本地模型存储区中的模型类。 我现在的解决方法是在文件'user.coffee \'中写入ѭ3。希望我的意思很清楚。 第二次编辑 这是我不使用
with
的方法: 用户咖啡
name:
    type: String
    unique: on
profiles: [ @profile ]
profile.coffee
content: String
这是动态加载的方式:
for fm in fs.readdirSync \"#{base}/models\"
    m = path.basename fm, \'.coffee\'
    schema[m] = (()->
        new Schema coffee.eval (
            fs.readFileSync \"#{base}/models/#{fm}\", \'utf8\'
        ), bare: on
    ).call model
    mongoose.model m, schema[m]
    model[m] = mongoose.model m
对我来说似乎是一个好的解决方案。     
已邀请:
        CoffeeScript的Coco分支支持
with
语法;参见https://github.com/satyr/coco/wiki/additions。但是,该语法只是将“ 9”的值设置为块中的目标对象,而不是编译为有问题且已弃用的“ 4”关键字。 假设您想在CoffeeScript中模拟Coco的
with
语法。您将执行以下操作:
withObj = (obj, func) -> func.call obj
那你可以写
withObj = (obj, func) -> func.call obj
withObj annoyingly.lengthy.obj.reference, ->
  @foo = \'bar\'
  @bar = \'baz\'
当然,在这种简单情况下,最好使用jQuery或Underscore的
extend
之类的实用函数:
_.extend annoyingly.lengthy.obj.reference, foo: \'bar\', bar: \'baz\'
    
        有别人的意见强加于你吗?这是Hack Time™!
o =
  a: 1
  b: 2
  c: 3

`with(o) {//`
  alert a
`}`
\“编译\”为:
var o;
o = {
  a: 1,
  b: 2,
  c: 3
};
with(o) {//;
alert(a);
};
很遗憾,这是道格·克罗克福德的观点被当作福音的另一个领域。
with
被认为有害的语句基于属性写的歧义拒绝它,但是当它与只读上下文对象(例如定义DSL类API的上下文对象)一起使用时,会忽略其有用性。     
        不可以。但是,您可以使用解构分配来达到类似的效果。
{foo, bar, baz} = require \'toocoollib\'
foo \'whoa!\'
您还应该注意,不建议使用
with
关键字,它是ES5严格模式下的语法错误。主流JS黑客之间的共识是,“ 4”不是一个好主意。 如果您举了一个您想做的事的例子,我可以给出一个更具体的答案。     
        刚刚在CoffeeScript常见问题页面上发现有关“变量导入”的信息: https://github.com/jashkenas/coffee-script/wiki/FAQ 似乎在CoffeeScript中不鼓励使用此技术,并且不支持此技术。     

要回复问题请先登录注册