Javascript Can';t使用CoffeeScript在meteor中创建仅限客户端的集合

Javascript Can';t使用CoffeeScript在meteor中创建仅限客户端的集合,javascript,meteor,collections,coffeescript,Javascript,Meteor,Collections,Coffeescript,嗨,我需要创建一个客户端集合,我在使用CoffeeScript,我正在尝试这样创建它: Template.mcqQuestionOptionsFieldset.onCreated -> @AddMcqOptions = new Mongo.Collection null 当我运行应用程序时,它不工作,我得到错误: ReferenceError:未定义AddMcqOptions 我尝试了没有“@”符号的情况,我尝试了一切,在javascript控制台中我看不到它已加载,似乎collec

嗨,我需要创建一个客户端集合,我在使用CoffeeScript,我正在尝试这样创建它:

Template.mcqQuestionOptionsFieldset.onCreated ->
  @AddMcqOptions = new Mongo.Collection null
当我运行应用程序时,它不工作,我得到错误:

ReferenceError:未定义AddMcqOptions

我尝试了没有“@”符号的情况,我尝试了一切,在javascript控制台中我看不到它已加载,似乎colleciton不存在

如果我删除@符号,错误路径移动到其他文件,我试图使用变量,但是如果我添加@符号,错误路径显示在我声明变量的同一个文件中,有人能告诉我发生了什么吗


谢谢

如果您想为特定的客户端集合创建模板,可以这样尝试。我用的是这样的,它的效果很好:

Template.myTemplate.created = function () {
    var instance = this;
    instance._MyClientCollection = new Mongo.Collection(null);

    instance._MyClientCollection.insert({...});
}

Template.myTemplate.helpers({
    options: function () {
        return Template.instance()._MyClientCollection.find({...}, {sort: {...}});
    }
});

Template.myTemplate.destroyed = function () {
    var instance = this;
    instance._MyClientCollection.remove({});
}

希望这会有所帮助……

客户端集合不需要在模板中定义,尤其是在其他文件中使用时

只需添加一个文件,例如
client/collections.coffee

@AddMcqOptions = new Mongo.Collection null
然后使用
AddMcqOptions.insert(…)
等,就像在客户端的任何位置一样

如果您想保持当前的结构,也可以使用胖箭头(虽然我还没有测试过)。您还将无法访问该模板的
/
@

Template.mcqQuestionOptionsFieldset.onCreated =>
  @AddMcqOptions = new Mongo.Collection null
另一个可能的选项允许您正常使用
/
@

self = this
Template.mcqQuestionOptionsFieldset.onCreated ->
  self.AddMcqOptions = new Mongo.Collection null

您正在尝试声明全局集合,还是将其隔离到模板?后者是您的代码所指示的,但您必须以非常特殊的方式访问它。使用普通javascript时,这个问题会容易得多:(问题是,即使在您使用
@
时,CS也不会执行“普通”全局变量。它只会将变量绑定到
this
,而不管
this
是什么(在您的例子中,模板是@David Weldon提到的。)