何时使用ReactiveDict vs ReactiveVar

时间:2017-06-16 13:51:58

标签: meteor

我在Meteor中并且在我的项目中一直使用Reactive Var而没有任何问题。在目前的例子中,我不确定是否需要使用ReactiveDict,因为我没有与ReactiveVar发生反应。

我将reactiveVar的值设置为导致对象数组的mongo查询。

Template.MasterList.onCreated(function () {
  this.teacherList = new ReactiveVar('');
});

Template.MasterList.onRendered(function () {
  var weekNum = Session.get('CurrentWeek').substr(0, 1);
  var week = 'Week' + weekNum;
  var query1 = {};
  query1[week] = { $in: ['JC', 'JF', 'F']};
  this.teacherList.set(Programs.find({ $and: [{ CampYear: Session.get('GlobalCurrentCampYear') }, query1]}, { sort: { FullName: 1 }}).fetch());
});

数组中的一个对象如下:

{ ...
  Students: {
    Week1: {
      Monday: ['Joe', 'Mary']
    }, 
    Week2: {},
    Week3: {}
  }
  ...
}

数组中的一个对象可能会改为:

{ ...
  Students: {
    Week1: {
      Monday: ['Joe', 'Mary', 'Bill']
    }, 
    Week2: {},
    Week3: {}
  }
  ...
}

当对其中一个对象发生更改时,reactiveVar没有看到数组中的更改以重新启动帮助程序。这里是否使用ReactiveDict?

编辑:

辅助功能:

saturdayTeacher: function (name) {
  var weekNum = Session.get('CurrentWeek').substr(0, 1);
  var week = 'Week' + weekNum;
  var teachers = Template.instance().teacherList.get();
  for (var i = 0, len = teachers.length; i < len; i++) {
    if (_.contains(teachers[i].Students[week].Saturday, name)) {
      Meteor.defer(function () {
        i = 0;
      });
      var teacher = teachers[i].FullName.split(' ');
      return teacher[0] + " " + teacher[1].slice(0, 1);
    }
  }
},

1 个答案:

答案 0 :(得分:1)

以一种非常简单的方式为您提供帮助的方法是在您的onRendered-Function中添加一个自动运行,您可以在其中设置ReactiveVar。因为onRendered-Function只执行一次。当我做对了,你想听一下光标的变化 AcctId Latitude Longitude output 0 123 40.50 -90.13 432.775598 1 123 40.53 -90.21 425.363959 2 123 40.56 -90.45 404.934516 3 123 40.63 -91.34 330.649766 Session.get('CurrentWeek')

所以试试这个:

&#13;
&#13;
Session.get('GlobalCurrentCampYear')
&#13;
&#13;
&#13;

它将一直执行查询结果或会话值更改。