流星 - 反应 Objects/Classes

Meteor - Reactive Objects/Classes

TLDR

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

1) 一份非常好的文档,在非常低的层次上解释了如何使用反应值。 2) 以某种方式管理对象的包,以便如果任何设置器发生更改,它们会通知所有将因此更改的获取函数。

可惜我也没见过。

我的例子

我在用于记录 咨询 的对话框后面有一些业务逻辑。我可能有一个设置状态更改的事件。

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

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();
}

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

你的 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();

在此处查看完整的 Tracker 文档:

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

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

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

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

https://viewmodel.meteor.com/

希望对您有所帮助。