gpt4 book ai didi

Meteor:使用 Sessions 和 ReactiveVar

转载 作者:行者123 更新时间:2023-12-03 14:06:08 25 4
gpt4 key购买 nike

什么时候应该使用 SessionReactiveVar ?我用 Session变量作为组件之间的通信媒介。让我们以 Stackoverflow 为例。

enter image description here

我标记了三个假设的组件。我们来看看filters零件。如果点击Tags然后 Main组件将根据您喜欢的标签显示其问题。为此,我将设置 Session.set("Main/showTags", true)Tags按钮被点击。在 Main 组件中,我将有一个辅助函数,如下所示:

Template.Main.helpers({
posts: function() {
var isTags = Session.get("Main/showTags");
var isQuestions = Session.get("Main/showQuestions");
...
if (isTags) {
return Posts.find().sort({tags: 1}) // or something along the lines
} else if (isQuestions) ...
}
});

这在大多数情况下效果很好,但我从很多地方看到我应该避免使用 Session并使用 ReactiveVar .但是如果我使用 ReactiveVar到处都是,那么我需要对所有模板实例的引用。我希望它在直接父模板和子模板之间运行良好(例如,在主组件中,可能有 VoteAnswerViewsButtonTemplate )但是你将如何使用 ReactiveVar当您希望独立组件相互通信时?

这是我的最后一个问题。如何正确使用 SessionReactiveVar保持组件的范围并使它们也相互通信?另外,如果我使用 Session我现在做的方式,我是否不必要地污染了全局命名空间?

相关文件:
  • https://dweldon.silvrback.com/scoped-reactivity
  • https://www.discovermeteor.com/blog/reactivity-basics-meteors-magic-demystified/
  • 最佳答案

    据我所知,没有与 Session 相关的内置功能。将它们与常规响应式(Reactive)字典全局变量(如 @Kyll 声明)区分开来的变量,例如,您将在 client.js 中声明文件。唯一的区别是 Session必须在应用程序范围内访问的“限制”。

    当我使用 reactive dictionary 时,我很高兴能够利用这种差异。或 reactive variables在较小的范围内。我认为我有三种范围:

    1 - 全局范围 .例如。当前的 UI 语言,UI 皮肤。我用 Session为了那个原因。简单且全局的数据,而不是可能与其他任何东西混淆的那种。

    2 - 一组模板。 例如,假设我创建了一个页面来在我的应用程序中生成和自定义 pdf。我不会在其他地方重用任何组件。我的集群是一个包含三个文件的文件夹,我们称它们为pdfgenerator.html , pdfgenerator.jspdfgenerator_controller.js .

    我用 pdfgenerator_controller.js用所有细节扩展路线。

    pdfgenerator.js文件,我有几个模板都在集群中使用。在文件的开头,我创建了一个响应式(Reactive)字典 pageSession (类似于 react 变量),我在所有集群中都使用它。它允许我在所有组件之间传递数据。

    3 - 本地范围。 无论是单个模板还是可重用组件,它都意味着单独工作。我也不会为那些使用 Session vars。我不想过度拥挤 Session命名空间。我所做的是将在实例化过程中操作它所需的所有数据传递给我的模板。

    它可能来自空格键:

    {{> mySingleTemplate data=myData}}

    或使用 Javascript:
    Blaze.renderWithData(Template.mySingleTemplate , myData, self.firstNode);

    在本地范围的情况下,我还使用 reactive dictionaryreactive vars只是为了处理单个模板中发生的 react 。在这种情况下,我会尽量避免需要将数据被动返回到父模板的情况。如果必须(即我可能不会用它制作一个包),我会使用在父模板范围内声明为全局的本地 minimongo 集合。这样,我可以将信息从可重用组件传递给它的父组件。

    示例:上传模板。我使用 minimongo 来存储每个上传文件的名称、大小、类型、状态和 url。 minimongo 集合在父表单模板和子上传器模板之间共享。

    底线:我只用 Session基本和全局信息的变量。如果我需要在全局范围内共享的数据结构太复杂/太大,我依赖于一个集合。

    我很想知道我是否做对了,所以这是一个答案,而不是一个测试,看看人们是否同意我的做事方式。欢迎所有意见和建议。

    关于Meteor:使用 Sessions 和 ReactiveVar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31580261/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com