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();
}
但不幸的是,这对我不起作用。
答案 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类型的行为,请查看
我希望这会有所帮助。