Meteor. Как проще всего разрешить пользователю настраивать пакет Meteor?

Я пишу пакет Meteor/Meteorite, и он работает, но многие значения жестко закодированы, и их можно настраивать.

Я хотел бы, чтобы пользователи могли устанавливать значения внутри пакета, помещая

Package.config({
  setting1: value1, 
  setting2: value2, 
  ...
})

где-то в коде приложения. Затем я читал эти значения в пакете с чем-то вроде PackageConfig.setting1, PackageConfig.setting2 и т. д.

Какой хороший и простой способ сделать это? Пакеты, которые я рассматривал в качестве примеров, кажутся немного сложными, и мне интересно, нужно ли это.


person Zach    schedule 08.08.2014    source источник


Ответы (1)


Вот мой простой пакет карт Google, который предоставляет аналогичный шаблон дизайна, который вы запрашиваете:

клиент/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 Google с помощью этого вызова: GoogleMaps.config(...);

Когда API карт полностью загружается, мы получаем уведомление с помощью метода реактивной готовности.

Я использую традиционный стиль программирования ООП, чтобы различать то, что предоставляет пакет, и то, что является приватным для реализации. Пакет экспортирует только общедоступный объект верхнего уровня (GoogleMaps), который можно настроить через общедоступный интерфейс. Затем вы можете ссылаться на GoogleMaps.apiKey в реализации пакета, как вы просили.

person saimeunt    schedule 09.08.2014