2

每当给定集合中的任何会话变量发生更改时,我都想运行一个函数。目前我这样做:

Meteor.autorun( ->
    Session.get("var1")
    Session.get("var2")
    runMyFunction()
)

这可行,但似乎有点尴尬,因为依赖关系非常人为。有没有更清洁的方法来实现相同的目标?

为故事添加一些上下文:在现实生活中,我想在布局更改时重置加载图像的动画状态(类)。这些会话变量控制布局。

4

1 回答 1

1

使用您正在使用的设计没有任何问题。如果您想使用更具体和自定义调整的东西,请查看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 getandset方法

于 2013-05-26T15:14:44.800 回答