【问题标题】:How do I access a collection from more than one file in Meteorjs?如何从 Meteorjs 中的多个文件访问集合?
【发布时间】:2013-08-21 18:46:55
【问题描述】:

在我的主 js 文件中,我定义了一个“new Meteor.Collection("Decks")”,如果没有数据,我会填充一些数据。

现在我在客户端文件夹中有一个视图文件夹,其中包含用于模板事件的 javascript。每个模板都有自己的 js 文件。这些事件需要查询和更新 Decks 集合,但我不知道该怎么做。我尝试在事件代码中编写“new Meteor.Collection("Decks")”,但我收到一个错误,表明该集合已存在。

我可以想象使用 requirejs 将全局变量传递给事件,但我觉得在 Meteor 中必须有一种本地方式。

如何访问不同文件中的同一个集合?

举个例子,我的app叫“builder”,所以主js叫“builder.js”,包含:

var Decks = new Meteor.Collection("Decks");

然后我在客户端文件夹中有另一个名为“do_other_stuff.js”的 javascript 文件,它想要查询 Decks 集合,因此类似于:

var first_deck = Decks.findOne({name: "first"});

但这显然行不通,因为 Decks 不是全局变量。

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    简单地说,将Decks 设为全局变量!去掉var关键字:

    Decks = new Meteor.Collection("Decks");
    

    【讨论】:

    • 哦,我想,因为窗口对象不可访问,所以我无法访问全局变量,但尝试后发现它们仍然可以访问,你根本不使用窗口对象来访问它们。这样做非常可怕,所以我必须过渡到像 require 这样的更好的方式......我不知道......我觉得 Meteor 应该为此提供一些东西,所以人们不必使用 requirejs 来保留他们的代码干净的。我将再等一天以获得更好的答案,如果我没有得到答案,则将您的标记为正确。你肯定给了我一个有效的答案:)。谢谢。
    • 别害怕,就是这样!仅此一项不会导致您的代码混乱,同时尝试将 require.js 与 Meteor 一起使用可以! (我已经看到了,这很糟糕。)另外,window 对象是完全可以访问的。只要确保你不要尝试在服务器端使用它。
    【解决方案2】:

    文件中的Meteor.subscribe("Decks") 应该可以解决问题。

    【讨论】:

    • 已投票取消您的反对票。确保您已分别在客户端和服务器上使用 Meteor.subscribe() 和 Meteor.publish() 发布和订阅了您的收藏集(当不使用流星的自动发布包时)可能是其他用户 Collection.find() 错误的原因.
    猜你喜欢
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2014-08-25
    相关资源
    最近更新 更多