Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在meteor包中创建其他地方可以依赖的变量的正确方法是什么?_Javascript_Meteor - Fatal编程技术网

Javascript 在meteor包中创建其他地方可以依赖的变量的正确方法是什么?

Javascript 在meteor包中创建其他地方可以依赖的变量的正确方法是什么?,javascript,meteor,Javascript,Meteor,我正在构建一个meteor包(主要供我自己使用),我想让它公开一些只读属性,包外的计算可以依赖这些属性。我的包的主js文件大致如下所示: MyPackage = (function() { var prop1, prop2, myPackage = {}; function setProp1(val) { prop1 = val; } function setProp2(val) { prop2 = val; } myPackage.publicMethod = functi

我正在构建一个meteor包(主要供我自己使用),我想让它公开一些只读属性,包外的计算可以依赖这些属性。我的包的主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导出的,它的功能类似于一种模块

我希望能够在某个模板的某个地方定义一个helper函数,该函数对prop1和prop2的值的更改做出反应,但仍然在getter方法getProp1和getProp2后面保持它们的隔离。最好的方法是什么


我已经通读了--我是否只需要使用depend()和changed()来构建我的getter和内部setter,还是package.js文件中必须发生某些事情?

是的,只需使用
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;
}();
然后,任何调用getter的助手都将隐式地依赖于依赖项,并对通过setter所做的更改作出反应:

UI.registerHelper('prop1', function() {
  return MyPackage.getProp1();
});
Template.someTemplate.prop2 = function() {
  return MyPackage.getProp2();
};
您可能还需要将其添加到您的
on_use
处理程序中的
包.js

api.use("deps");

这正是我需要的。谢谢