流星:在其他文件中使用它时暂时保留本地集合

时间:2019-04-13 23:24:56

标签: javascript meteor collections

我在自定义路由上创建了一个文件,该文件将用于本地集合。

此文件位于 imports / localDb / 下,名为 Patients.js

import { Mongo } from 'meteor/mongo';

const PatientsLocal = new Mongo.Collection();

export default PatientsLocal;

我正在做的是每次需要执行操作(插入,提取,...)时都导入此文件

例如,我有一个文件:

import PatientsLocal from '../../../localDb/patients';

// ...

PatientsLocal.insert(patient);

问题是:

当我必须执行操作时,导入 Patients.js 文件,因此该文件将再次运行,并且集合将再次实例化,因此我无法在一个文件中插入对象并在另一个上获取。

我该怎么办才能在运行时持久化集合以实现所需?

1 个答案:

答案 0 :(得分:0)

您可以将其导出为const,这样就可以了:

export const PatientsLocal = new Mongo.Collection();

但是,还有更多需要考虑的地方:该模块同时包含定义和实例化代码。一个好的做法是将实例与定义分离。

一种可能的解决方法是导出一种上下文对象,该对象包含几个定义了整个Patients上下文的静态属性,并在启动时使用必须实例化的属性对其进行修饰:

imports / local / Patients.js

export const Patients = {
  name: 'patients',
  collection: null,
  // other definitions...
}

然后在启动代码中实例化集合一次

client / main.js

import { Patients } from '../imports/local/patients'
Patients.collection = new Mongo.Collection()

(请注意,可以将其移动到自己的启动模块文件中)

,然后在运行时代码中导入上下文而不是集合:

import { Patients } from '../../../local/patients'

// ...

Patients.collection.insert(patient)

请注意,这些只是解决此问题的一些示例。其他可能包括使用global名称空间(不鼓励但不禁止使用)或某种注册表类来跟踪集合的所有实例(例如dburles:mongo-collection-instances,这是一个不错的程序包,但是可以访问集合通过name(本地集合中未定义)。