等到收集包装可用

时间:2015-05-27 10:42:49

标签: javascript meteor package atmosphere.js

我目前正在开发一个Meteor软件包,我希望将一些数据插入到Meteor集合中,该集合可以在" core" -Application中添加软件包。

我想做的一件事是将一些数据插入到Startup上的一个集合中:

# Inside the package (the Books-Collection is a collection form the core-App)
Meteor.startup ->
  Books.insert title: 'foo', author: 'bar'

这不起作用,因为首先加载包。因此,核心系统的书籍收藏不可用。如果我将它封装到一个我可以稍后调用的函数中,它会按预期工作。

# inside the package (the Books-Collection is a collection form the core-App)
sampleFunction = ->
  Books.insert title: 'foo', author: 'bar'

# call function e.g. after 10 seconds
sampleFunction()

我可以在core-Application中输入对函数的调用,但是我想在包中封装这个功能,所以每次用户添加包时都会自动插入一本书。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

第一个问题可能是因为您的收藏集是在Meteor.startup中定义的。如果您自己定义它,它应该按照您的预期工作:

Books = new (Mongo.Collection)('books')

而不是:

Meteor.startup ->
  Books = new (Mongo.Collection)('books')

其次,当您以可以访问应用程序集合信息的方式添加软件包时,无法运行代码。

您可以做的最好的是每次运行应用程序时运行代码(例如在添加软件包后第一次运行应用程序):

您可以检查该图书是否已添加,如果没有添加:

Meteor.startup ->
  Books.upsert { title: 'foo' },
    title: 'foo'
    author: 'bar'

以上所有内容在服务器上效果最佳。