【问题标题】:Adding Elements To Collections and Reactivity向集合和反应性添加元素
【发布时间】:2014-08-21 09:03:26
【问题描述】:

将文档添加到已发布集合时的预期反应行为是什么?更具体地说:将文档添加到集合中是否会使对该集合的所有订阅(甚至那些不匹配的订阅)无效并导致重新呈现所有相关的 ui 元素?

这就是我现在所经历的,至少。

更具体地说:我有表单,有一些“普通”字段,但也有列表。这些列表还包含包含字段的子表单。两种类型的表单都存储在一个通用数据集合中。此数据集合的视图通过细粒度订阅进行管理。

当我添加一个新的列表元素,一个新的子表单到基本表单时,整个基本表单被重新渲染。甚至没有相关的基本形式被重新渲染。

我有一个 github repo 展示了这个,虽然有点混淆。这是一个电影数据库。您可以添加电影、为其命名、标语以及为电影添加演员。演员有名字和家。将演员添加到电影时,每部电影都会重新渲染。

https://github.com/Crenshinibon/fields3/tree/462a9291bfc400a2731c21d2debdd4071be764ed

我知道这个问题:Understanding Meteor Publish / Subscribe 并认为这部分实际上是缺失的。 (我只是没有足够的声望点可以在 cmets 中询问)我认为我非常了解 Meteor 的 Pub/Sub 机制。只是由此产生的反应行为有点不清楚。

我也知道这个问题:Reactivity, isolation, and lists。但它对于 Spark 和 Blaze 的变化很大(尤其是它使#isolate 过时了。)

在我(再次)重建我的应用程序以将各种表单(甚至属性)放在不同的集合中以避免重新加载“整个页面”之前,我想我可能会问,也许我有一些东西不见了。

我在 0.9.0-rc10。

【问题讨论】:

    标签: collections meteor


    【解决方案1】:

    您不应该将订阅调用放在 Meteor.autorun 中。

    Meteor.autorun 是一个响应式上下文,这意味着如果内部的响应式数据源发生变化,内部的所有内容都将重新运行。我们将我们所在的频道存储在“current_channel”下的 Session 中。如果该会话值发生变化,则订阅会被更新,我们可以访问不同的消息! src

    而是在你的 javascript 中做这样的事情:

    Template.viewContent.movies = function () {
        var subscription = Meteor.subscribe('movies');
        return {
            data: Movies.find(),
            ready: subscription.ready
        };
    }
    

    那么您的模板将如下所示:

     {{#each movies}}
          {{#if ready}}
               {{#each data}}
                   #DOSOMETHING WITH THE MOVIES#
               {{/each}}
          {{else}}
               !!!Loading indicator here!!!
          {{/if}}
     {{/each}}
    

    【讨论】:

    • 谢谢。我也想过Deps.autorun 是源。但是使用您提出的解决方案,当另一个用户添加电影时,我失去了自动更新用户视图的功能,对吗?
    • @Crenshinibon 不,我的解决方案不会破坏反应性。在服务器上添加新数据时,订阅仍会自动更新。尝试通过 mongo 控制台插入额外的东西
    • 我想知道Meteor.autorun 是干什么用的。我会测试它并稍后联系。
    • @Crenshinibon Meteor.autorun 引用 Deps.autorun docs.meteor.com/#deps_autorun 。它现在运行给定的函数,并在依赖项发生变化时重新运行它
    猜你喜欢
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 2022-07-21
    • 2016-04-23
    • 2022-12-18
    • 2016-02-26
    相关资源
    最近更新 更多