【问题标题】:What is the correct way to run a function whenever a session variable changes in meteor?每当流星中的会话变量发生变化时,运行函数的正确方法是什么?
【发布时间】:2013-05-27 07:36:43
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: meteor


    【解决方案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)getCssClass()分别设置和获取值,而不是Sessiongetset方法

    【讨论】:

    • 错在语义上是丑陋的。我不需要var1var2 的值,所以使用get 没有意义
    • 我想我起初混淆了你的意思,现在我明白了你的意思。 Deps.dependency 可能是直接连接 runMyFunction() 的最佳方式
    • 我想不出一个简单的方法来做到这一点。可以举个例子吗?
    • 谢谢。但在我看来,它太复杂了,无法使用。如果我可以公开Session var 依赖对象来设置depend(),那就太好了
    猜你喜欢
    • 2015-09-14
    • 2012-05-29
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 2015-10-22
    • 1970-01-01
    相关资源
    最近更新 更多