Javascript 在Meteor web应用程序中显示多维数据库文档

Javascript 在Meteor web应用程序中显示多维数据库文档,javascript,html,mongodb,meteor,Javascript,Html,Mongodb,Meteor,我决定在我当前的web应用程序项目中使用Meteor。在这个网站上,我们希望用户拥有自己的汽车库存,并需要使用Meteor的边栏模板引擎以以下格式显示Mongo收藏中的汽车 Car 1 Engine: 6-cylinder Color: black Car 2 Engine: 4-cylinder Color: white 我们的模板设置如下: <template name=”cars”> {{#each cars}} {{&

我决定在我当前的web应用程序项目中使用Meteor。在这个网站上,我们希望用户拥有自己的汽车库存,并需要使用Meteor的边栏模板引擎以以下格式显示Mongo收藏中的汽车

Car 1
    Engine: 6-cylinder
    Color: black
Car 2
    Engine: 4-cylinder
    Color: white
我们的模板设置如下:

<template name=”cars”>
    {{#each cars}}
        {{> car}}
    {{/each}}
</template>

<template name=”car”>
    Engine: {{engine}}
    Color: {{color}}
</template>
我的问题是将car_id传递给helper函数。我知道我们可以通过模板上的data属性将参数传递给helper函数,比如
{{car data=carId}
,但是我们需要从
template.cars.helpers
传递car\u id

有没有一个简单的方法来实现这一点,我没有看到或我误解了流星和边栏的基本原理


注意:实际应用与汽车无关,也不是这么简单。因此,有必要使用单独的Mongo集合来保存汽车和汽车属性。

当您使用
#每个
在光标上迭代时,内部上下文将成为单个文档。在您的示例中,
car
模板具有car文档的上下文。因此,渲染
{{engine}
{{color}}
不需要帮助程序

为了更好地理解这一点,我建议阅读

但是,如果您需要助手车内的
\u id
来执行其他操作(可能是集合连接),那么您可以通过
访问它。\u id
(本例中助手的上下文也是文档)。下面是一个例子:

Template.car.helpers({
驱动程序:函数(){
返回Meteor.users.findOne({carId:this.\u id});
}
});

按照您的设置方式,您首先在汽车中搜索,然后对汽车中的每条记录在汽车表中查找一辆汽车,对吗?这可能不是一个问题,而是两个问题

首先,你有通过你提到的汽车id的问题,其次,你有速度的问题,因为在单个汽车表中逐个查找你在汽车表中找到的每个记录需要时间

如果您真的必须保留这两个单独的表,那么我建议您在第一个助手中完成所有数据库工作,并删除第二个助手


换句话说,在第一个助手中查找cars表中的所有记录,然后在同一个助手中查找单个car表中的所有记录,并将此新数组传递给#each cars。这样,您就可以删除template.car.helper,让Blaze以正常的Meteor方式处理它。

我不知道这些集合是什么样子,也不知道
Cars
car
之间的关系是什么,但是您可以访问helpers中
Cars
文档的属性,如
this
。所以你可能想要
这个.\u id
这个.car\u id
。谢谢!“这”是缺失的成分。想想我花了5个小时试图弄明白这一点:-/
Template.cars.helpers({
    return Cars.find({ownerId: Meteor.user_id()});
});

Template.car.helpers({
    engine: function(){
        var car_id = “???”;
        return Car.findOne({car_id: car_id}).engine;
     },

    color: function(){
        var car_id = “???”;
        return Car.findOne({car_id: car_id}).color;

    },
});