流星 - 反应 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 类型的行为,请查看
希望对您有所帮助。
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 类型的行为,请查看
希望对您有所帮助。