每当给定集合中的任何会话变量发生更改时,我都想运行一个函数。目前我这样做:
Meteor.autorun( ->
Session.get("var1")
Session.get("var2")
runMyFunction()
)
这可行,但似乎有点尴尬,因为依赖关系非常人为。有没有更清洁的方法来实现相同的目标?
为故事添加一些上下文:在现实生活中,我想在布局更改时重置加载图像的动画状态(类)。这些会话变量控制布局。
每当给定集合中的任何会话变量发生更改时,我都想运行一个函数。目前我这样做:
Meteor.autorun( ->
Session.get("var1")
Session.get("var2")
runMyFunction()
)
这可行,但似乎有点尴尬,因为依赖关系非常人为。有没有更清洁的方法来实现相同的目标?
为故事添加一些上下文:在现实生活中,我想在布局更改时重置加载图像的动画状态(类)。这些会话变量控制布局。
使用您正在使用的设计没有任何问题。如果您想使用更具体和自定义调整的东西,请查看Deps.dependency,它应该可以让您创建自定义反应函数/变量。
EventedMind 有一个关于如何创建的视频:http ://www.eventedmind.com/posts/meteor-build-a-reactive-data-source
值得注意的Meteor.autorun
是正在贬值,有利于Deps.autorun
**更新:小例子:
var cssClass = "cls1";
var cssDep = new Deps.Dependency;
getCssClass = function () {
cssDep.depend()
return cssClass;
};
setCssClass = function (w) {
if(w!=cssClass) {
cssClass = w;
cssDep.changed();
runMyFunction();
}
};
然后分别使用setCssClass(newvalue)
andgetCssClass()
来设置和获取值,而不是Session
get
andset
方法