从包中的meteor主应用程序访问对象

时间:2014-05-20 18:59:23

标签: javascript node.js meteor package meteorite

所以我现在正在开发一个基于几个不同包的流星应用程序。

我的主应用程序中有一个对象,我将其用作包的一种API。这个对象看起来像这样(在主应用程序中的lib / helpers / api.coffee中):

@Mainapp =
  getCurrentUser: ->
  Meteor.user()

  getCurrentUserId: ->
  Meteor.userId()

  setTitle: (title) ->
  setTitle(title)

  setAlert: (message, type='danger') ->
  Alerts.add(message, type)

如果我在Mainapp或控制台中访问此对象,一切都按预期工作。 但是如果我尝试在应用程序的包中访问此对象,我会得到“Mainapp not defined”-Error。

有没有办法在主应用程序和包之间共享此对象。我知道我可以使用session.set和session.get做一些事情,但我认为最好有一个中心对象作为我的包的一种API。

Meteor.userId()和Meteor.user()为Meteor核心系统做了类似的事情(这些功能也可以在一个软件包中使用)。他们如何实现Meteor主应用程序和软件包中的此功能?

提前致谢!

2 个答案:

答案 0 :(得分:1)

使Mainapp可以全球访问。所以你的例子生成的javascript应该是:

var constructor = function () {
}
constructor.prototype.getCurrentUser= function () {.....
.... DEFINE YOUR METHODS ....

Mainapp = new constructor();

Meteor使用前面没有var的变量进行魔术,并使它们可以全局访问。

答案 1 :(得分:0)

我终于找到了问题所在。

对象变量需要全局可用(正如marcodejongh正确指出的那样)。

我做错了是我直接在文件中调用了封装在对象中的功能(没有函数或其他任何东西 - > on file-Load)。

Mainapp.getCurrentUserId()

解决我的问题的方法是使用例如一个功能。

# inside an iron-router routes
Router.map ->
  @route 'index',
  controller: IndexController
  path: '/index'
  onAfterAction: ->
    Mainapp.setTitle 'Test'

Meteor首先构建所有包。此时,无法访问Mainapp-Object。构建包并将其嵌入Mainapp后,该功能可用。