Meteor 在另一个集合中使用 collection.find()
Meteor using a collection.find() in another collection
我需要在另一个集合中进行 collection.find()。我有一个名为 Orders 的集合。
Orders = new Mongo.Collection('orders')
Orders.attachSchema(new SimpleSchema({
clientId: {
type: String
},
orderDate: {
type: Date
}
});
它使用 aldeed:collection2 和 aldeed:simple shema。我用它来创建一个使用 aldeed:autoform
的表单
我想在包含客户端 ID 的 ClientId 字段中放置一个 allowedValues。
所以我需要使用 Clients.find() 获取所有客户端 ID。客户是另一个集合。但是在客户端,如果我尝试将 console.log(Clients.find().fetch()) 放入我的 order.js 集合文件中,它会记录一个空数组,而在服务器上它会记录一个数组包含我所有的客户。我理解在客户端可以使用集合之前调用该函数。但即使将它包装在 Meteor.startup 中也不起作用。有人知道吗?
我猜你想做的是在 Order
编辑器中限制客户端的选择。您可以像下面这样创建一个助手
Template.editOrder.helpers
clientList: ()->
Client.find().fetch()
并将此助手与自动表单一起使用
{{> afQuickField name="clientSelected" options=clientList}}
实际上,将所有这些放在一起非常棘手,因为我还需要在客户端验证该字段。所以我使用了 Ryan 展示的解决方案,但需要添加一些东西:
var ordersShema = {
clientId: {
type: String,
allowedValues: clientsId
},..
}
Orders.attachSchema(new SimpleSchema(ordersShema));
clientsId 是从 Clients 集合中动态上传的 ID。
但这在服务器端没问题,但在客户端,clientsId 仍然是空的,无法进行验证。所以我不得不在客户端添加这段代码:
Tracker.autorun(function () {
Orders._c2._simpleSchema._schema.clientId.allowedValues = Labelizer.allowedValues(Clients.find(),'_id');
});
(Labelizer 只是一个从游标创建 allowedValues 的函数)。
当然,选项是通过助手生成的。
Template.ordersAdd.helpers({
clientsList:function(){
return Labelizer.options(Clients.find(),'_id',['name','surname'],' ');
},...
}
所以这个领域与这个助手一起工作得很好:
{{> afQuickField name='clientId' options=clientsList}}
我需要在另一个集合中进行 collection.find()。我有一个名为 Orders 的集合。
Orders = new Mongo.Collection('orders')
Orders.attachSchema(new SimpleSchema({
clientId: {
type: String
},
orderDate: {
type: Date
}
});
它使用 aldeed:collection2 和 aldeed:simple shema。我用它来创建一个使用 aldeed:autoform
的表单我想在包含客户端 ID 的 ClientId 字段中放置一个 allowedValues。 所以我需要使用 Clients.find() 获取所有客户端 ID。客户是另一个集合。但是在客户端,如果我尝试将 console.log(Clients.find().fetch()) 放入我的 order.js 集合文件中,它会记录一个空数组,而在服务器上它会记录一个数组包含我所有的客户。我理解在客户端可以使用集合之前调用该函数。但即使将它包装在 Meteor.startup 中也不起作用。有人知道吗?
我猜你想做的是在 Order
编辑器中限制客户端的选择。您可以像下面这样创建一个助手
Template.editOrder.helpers
clientList: ()->
Client.find().fetch()
并将此助手与自动表单一起使用
{{> afQuickField name="clientSelected" options=clientList}}
实际上,将所有这些放在一起非常棘手,因为我还需要在客户端验证该字段。所以我使用了 Ryan 展示的解决方案,但需要添加一些东西:
var ordersShema = {
clientId: {
type: String,
allowedValues: clientsId
},..
}
Orders.attachSchema(new SimpleSchema(ordersShema));
clientsId 是从 Clients 集合中动态上传的 ID。 但这在服务器端没问题,但在客户端,clientsId 仍然是空的,无法进行验证。所以我不得不在客户端添加这段代码:
Tracker.autorun(function () {
Orders._c2._simpleSchema._schema.clientId.allowedValues = Labelizer.allowedValues(Clients.find(),'_id');
});
(Labelizer 只是一个从游标创建 allowedValues 的函数)。
当然,选项是通过助手生成的。
Template.ordersAdd.helpers({
clientsList:function(){
return Labelizer.options(Clients.find(),'_id',['name','surname'],' ');
},...
}
所以这个领域与这个助手一起工作得很好:
{{> afQuickField name='clientId' options=clientsList}}