流星 - 反应对象/类

时间:2016-03-07 15:30:06

标签: meteor meteor-helper

TLDR

我喜欢真正专注于保持业务逻辑远离视图模型/控制器。我觉得这在Meteor中有时相当困难。也许我错过了这一点,但我真的在追求两件事之一:

1)一个非常好的文档,以非常低的水平解释如何使用反应值。 2)以某种方式管理对象的包,以便如果任何setter被更改,它们将通知所有将因此而改变的get函数。

不幸的是,我也没见过。

我的示例

我在用于记录咨询的对话框后面有一个很好的商业逻辑。我可能有一个设置状态变化的事件。

我想在活动中做这样的事情:

const cc = new ConsultationEditor();
cc.setChiefComplaint(event.target.value);
console.log(cc.data());
ConsultationDict.set("consEdit", cc.data() );

当用户更新此值时,我希望根据更改显示多个字段。为此,我有一个以下的帮手:

fields: function(){
  console.log("trying to get fields");
  const obj = ConsultationDict.get('consEdit');
  cc = new ConsultationEditor(obj);
  return cc.getFields();
}

但不幸的是,这对我不起作用。

1 个答案:

答案 0 :(得分:1)

你的ConsultationDict是什么?

您描述它的方式,您希望它与官方ReactiveDict包中的ReactiveDict一样。

https://atmospherejs.com/meteor/reactive-dict

查看本教程的示例:

https://themeteorchef.com/snippets/reactive-dict-reactive-vars-and-session-variables/

如果您确实需要对反应性进行更多微调,还可以设置依赖关系跟踪器tracker = new Tracker.Dependency,然后在使用tracker.changed()更改变量的任何位置引用它,并且数据需要在哪里像这样通知tracker.depend()

var favoriteFood = "apples";
var favoriteFoodDep = new Tracker.Dependency;

var getFavoriteFood = function () {
  favoriteFoodDep.depend();
  return favoriteFood;
};

var setFavoriteFood = function (newValue) {
  favoriteFood = newValue;
  favoriteFoodDep.changed();
};

getFavoriteFood();

请在此处查看完整的跟踪器文档:

https://github.com/meteor/meteor/wiki/Tracker-Manual

我还发现这个要点对于构建反应对象很有用:

https://gist.github.com/richsilv/7d66269aab3552449a4c

并且对于ViewModel类型的行为,请查看

https://viewmodel.meteor.com/

我希望这会有所帮助。