Meteor - 允许用户配置Meteor包的最简单方法是什么?

时间:2014-08-08 23:14:26

标签: meteor meteorite

我正在编写一个流星/陨石包,并且它正在运行,但许多值都是硬编码的,应该是可配置的。

我希望用户能够通过添加

来设置包内的值
Package.config({
  setting1: value1, 
  setting2: value2, 
  ...
})

应用代码中的某个地方。然后,我会使用PackageConfig.setting1PackageConfig.setting2等内容读取包中的值。

这是一个好的,简单的方法吗?我看过的示例包看起来有点复杂,我想知道这是否必要。

1 个答案:

答案 0 :(得分:1)

这是我的一个简单的谷歌地图包,它提供了你要求的类似设计模式:

client / lib / google-maps.js:

GoogleMaps={
  // public methods
  config:function(options){
    _.extend(this,options);
  },
  ready:function(){
    this._loadingDependency.depend();
    return this._ready;
  },
  // private methods
  _loaded:function(){
    this._ready=true;
    this._loadingDependency.changed();
  },
  // public members
  apiKey:"",
  // private members
  _ready:false,
  _loadingDependency:new Deps.Dependency()
};

_googleMapsLoaded=function(){
  GoogleMaps._loaded();
};

Meteor.startup(function(){
  if(!GoogleMaps.apiKey){
    throw new Meteor.Error(-1,"API key not set, use GoogleMaps.config({apiKey:YOUR_API_KEY});");
  }
  $.getScript("https://maps.googleapis.com/maps/api/js?key="+GoogleMaps.apiKey+"&callback=_googleMapsLoaded");
});

package.js(警告,Meteor< 0.9软件包API,预计在不久的将来会发生重大变化)

Package.describe({
  summary:"Google Maps packaged for Meteor."
});

Package.on_use(function(api){
  api.use(["jquery","deps"],"client");
  //
  api.add_files([
    "client/lib/google-maps.js"
  ],"client");
  //
  api.export(["GoogleMaps","_googleMapsLoaded"],"client");
});

所以基本上它是一个简单的包,允许用户通过此调用指定自己的谷歌API密钥客户端:GoogleMaps.config(...);

当地图API完全加载时,我们会通过反应就绪方法获得通知。

我使用传统的OOP编程风格来区分包暴露的内容和实现的私有内容。 该软件包仅导出顶级公共对象(GoogleMaps),可通过公共接口进行配置。 然后,您可以按照您的要求在包实现中引用GoogleMaps.apiKey。