Хобрук: Ваш путь к мастерству в программировании

Как правильно создавать переменные в пакете метеора, от которых можно зависеть в другом месте?

Я создаю пакет метеора (в основном для собственного использования), и я хотел бы, чтобы он предоставлял некоторые свойства только для чтения, от которых могут зависеть вычисления вне пакета. Основной js-файл моего пакета выглядит примерно так:

MyPackage = (function() {
  var prop1, prop2, myPackage = {};

  function setProp1(val) { prop1 = val; }
  function setProp2(val) { prop2 = val; }

  myPackage.publicMethod = function () {
    // This might change prop1 and prop2 via the setters as a side effect
  };

  myPackage.getProp1 = function() { return prop1; };
  myPackage.getProp2 = function() { return prop2; };

  return myPackage;
}();

Объект MyPackage экспортируется с помощью api.export и функционирует как своего рода модуль.

Я хотел бы иметь возможность определить вспомогательную функцию в каком-то шаблоне где-нибудь, которая реагирует на изменения в значениях prop1 и prop2, но при этом сохранять их изоляцию за методами получения getProp1 и getProp2. Как лучше всего это сделать?

Я прочитал раздел документации по Deps.Dependency -- мне просто нужно спроектировать геттеры? и внутренние сеттеры, использующие depend() и change(), или что-то должно произойти в файле package.js?

05.05.2014

Ответы:


1

Да, просто используйте Deps.Dependency объекты:

MyPackage = (function() {
  var prop1, prop2, myPackage = {};
  var prop1Dependency = new Deps.Dependency();
  var prop2Dependency = new Deps.Dependency();

  function setProp1(val) {
    prop1 = val;
    prop1Dependency.changed();
  }
  function setProp2(val)  {
    // alternatively:
    if (prop2 !== val) {
      prop2 = val;
      prop2Dependency.changed();
    }
  }

  myPackage.publicMethod = function () {
    // This might change prop1 and prop2 via the setters as a side effect
  };

  myPackage.getProp1 = function() {
    prop1Dependency.depend();
    return prop1;
  };
  myPackage.getProp2 = function() {
    prop2Dependency.depend();
    return prop2;
  };

  return myPackage;
}();

Тогда любые помощники, которые вызывают ваши геттеры, будут неявно зависеть от зависимостей и реагировать на изменения, сделанные через сеттеры:

UI.registerHelper('prop1', function() {
  return MyPackage.getProp1();
});
Template.someTemplate.prop2 = function() {
  return MyPackage.getProp2();
};

Вам также может понадобиться добавить это к вашему package.js в обработчике on_use:

api.use("deps");
05.05.2014
  • Это как раз то, что мне было нужно. Спасибо. 05.05.2014
  • Новые материалы

    Блоги, которые обязательно нужно прочитать специалистам по обработке и анализу данных :
    Добро пожаловать в 2020! Новый год и новое десятилетие. Поскольку мы начинаем новый и захватывающий год в науке о данных, важно, чтобы профессионалы открыли для себя лучшие блоги по науке о..

    Универсальный базовый доход
    Универсальный базовый доход В последние годы концепция всеобщего базового дохода (УБД) набирает обороты как все более эффективное решение для борьбы с растущим неравенством доходов и..

    Освоение Python для анализа финансовых данных: руководство по получению данных о доходах от акций
    Если вы хотите научиться получать данные о доходах от акций с помощью Python, то это руководство для вас! В этой статье мы рассмотрим несколько примеров сбора данных о доходах от акций. Мы..

    Абсолютно имеет смысл.
    Абсолютно имеет смысл. Мой репетитор даже предложил то же самое. Одна проблема, с которой я столкнулся, заключается в том, что для каждой из категорий не было ярлыка «хорошо». Если я перебираю..

    МАШИННОЕ ОБУЧЕНИЕ И EDA
    Каковы шаги в машинном обучении Определение проблемы Генерация гипотез Извлечение данных Исследование данных Прогнозное моделирование Развертывание модели Зачем нам ЭДА? Идентификация..

    В чем основные различия между ReactJS и React-Native?
    В чем основные различия между ReactJS и React-Native? Что я узнал, создавая веб-приложения, а затем мобильные приложения на React React-Native существует уже около 2 лет и стал..

    LeetCode — Умножение строк
    Постановка задачи Даны два неотрицательных целых числа num1 и num2 , представленные в виде строк, вернуть произведение num1 и num2 , а также представлен в виде строки. Примечание . Вы..