使用客户端和服务器目录组织Meteor

使用客户端和服务器目录组织Meteor,meteor,Meteor,我从Meteor开始,我已经从一个咖啡文件中运行了所有东西,但是我想组织起来,并将一些代码移动到/public和/server。但是,当我这样做时,我的集合是未定义的。我已经移动了很多代码,但是集合仍然没有定义。我已经删除了自动发布和不安全的包。我做错了什么 /咖啡 Trips = new Meteor.Collection "trips" if Meteor.isClient Meteor.subscribe 'trips' if Meteor.isServer Meteo

我从Meteor开始,我已经从一个咖啡文件中运行了所有东西,但是我想组织起来,并将一些代码移动到/public和/server。但是,当我这样做时,我的集合是未定义的。我已经移动了很多代码,但是集合仍然没有定义。我已经删除了自动发布和不安全的包。我做错了什么

/咖啡

Trips = new Meteor.Collection "trips"

if Meteor.isClient
    Meteor.subscribe 'trips'

if Meteor.isServer
    Meteor.publish 'trips', -> Trips.find()

    Trips.allow
        insert: -> true
        update: -> true
        remove: -> true
/客户/旅行/咖啡

Meteor.startup ->
    Template.Trips.all_trips = -> Trips.find()

您需要一个
Trips
才能访问其他文件,您在根目录中定义了一个
Trips
,因此它不是全局的&您的
客户端/Trips。coffee
看不到它。您可以使用
@
将其设置为全局:

在您的
/main.coffee中

@Trips = new Meteor.Collection "trips"
因此,其他文件(客户端和服务器)也可以访问该文件

当您进一步拆分文件时,您将得到3个文件:

/main.coffee(可由服务器和客户端访问并首先加载)

/client/trips.coffee

Meteor.subscribe 'trips'
Meteor.startup ->
    Template.Trips.all_trips = -> Trips.find()
Meteor.publish 'trips', -> Trips.find()

Trips.allow
    insert: -> true
    update: -> true
    remove: -> true
/server/server.coffee

Meteor.subscribe 'trips'
Meteor.startup ->
    Template.Trips.all_trips = -> Trips.find()
Meteor.publish 'trips', -> Trips.find()

Trips.allow
    insert: -> true
    update: -> true
    remove: -> true

我建议您也尽快利用本地智能软件包(在packages/下)。它们在控制加载顺序和位置(服务器/客户端)文件方面非常灵活。你是说添加现有包以在我的项目中使用,还是写我自己的包并将其用作应用程序逻辑的存储位置?写你自己的包。任何感觉它可以被重用的逻辑注意,这种行为很快就会得到改进(随着的工作),这就像一个符咒,只是在添加@之后,我不得不将Template.Trips.all_Trips var从Meteor.startup()中取出。Thnx!