所以我现在正在开发一个基于几个不同包的流星应用程序。
我的主应用程序中有一个对象,我将其用作包的一种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主应用程序和软件包中的此功能?
提前致谢!
答案 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后,该功能可用。